プログラミング Haskell 第 2 版 †
プログラミングHaskell 第2版 Grahum Hutton ラムダノート 2019-08-02 ¥ 3,456 |
第8章 型と型クラスの定義 †
p.93
この章では、Haskell で新しい型と型クラスを宣言する方法を説明します。
型を宣言する方法を三つ示した後、再帰型について考察してから、型クラスとそのインスタンスを宣言する方法を解説します。
最後に本章の締めくくりとして、恒真式を検査する関数と抽象機械を開発します。
8.1 typeによる型宣言 †
新しい型を宣言するいちばん簡単な方法は、既存の型に別名を付けることです。
これには Haskell の typeを使います。
たとえば、プレリュードにある以下の宣言は、String型が文字のリスト [Char]の別名でしかないことを表しています。
1
type String = [Char]
- 素朴な疑問
- Haskellのプレリュード内で行われている宣言って、どうやって確認するんだろうか?
- つまり、上記の例で言えば、Stringという型が、どこで宣言されているか?
- ソースコードを見る方法、コマンドなどが用意されているのだろうか?
p.94
8.2 dataによる型宣言 †
既存の型に別名を付けるのではなく、完全に新しい型を宣言するには、Haskell のdataを使って型の値を指定します。
たとえば、プレリュードにある以下の宣言は、Bool型が Falseと Trueという二つの値から構成されることを表します。
1
data Bool = False | True
このような型宣言で使う記号「|」は「または」と読み、型の値は構成子と呼びます。
新しく型を定義する場合と同様に、新しく定義する構成子は先頭を大文字にしなければいけません。
さらに、同じ名前の構成子を複数の型で用いることはできません。
構成子 †
- Haskell の文法 http://mew.org/~kazu/academic/2013/miyazaki-u/syntax.html
代数データ型
代数データ型は、直積型の直和型です。すべてにラベルが付きます。このタグを構成子(constructor)と呼びます。以下は、代数データ型が直和型だと分かる例です。1
data Bool = False | True
Bool が型、False と True が構成子です。"|" が直和(または)を表します。
p.95
GHCi で試す場合には、新しい型の値を GHC が表示できるように、data宣言の最後に deriving Showを追加する必要があります。
引数を取ることから、構成子は関数だといえます。
普通の関数と構成子関数との違いは、後者は定義に等式を持たず、純粋にデータを作るために存在していることです。