型、型名、型コンストラクタ…
先日の引用と若干矛盾しているようにも思うんだけど、型を宣言するときの型名と型コンストラクタのちがいに触れたパラグラフ(たぶん先日の引用テキストが不親切なだけだと思うけど)。
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 19人 クリック: 547回
- この商品を含むブログ (34件) を見る
〔…〕型コンストラクタは型を引数に取って新しい型を作るものです。〔…〕型引数がどう使われるか明確なイメージをつかむために、すでに知っている型がどんな実装になっているか見てみましょう。
data Maybe a = Nothing | Just aこのaが型引数です。そして型引数を取っているので、Maybeは型コンストラクタと呼ばれます。Nothingでない場合に何をこのデータ型に保持させたいかに応じて、この型コンストラクタからMaybe Int、Maybe Stringなどの型を作れます。単なるMaybeという型の値は存在できません。なぜなら、Maybeは型コンストラクタであって、型ではないからです。型コンストラクタは、すべての引数を埋めて初めて何かしらの値の型になれます。
これは例えば、次のような型宣言は型と型コンストラクタが事実上同一であるケース(具体型)と考えればいいのかな?(前回ポストのサンプルコード)
data BookInfo = Book Int String [String] deriving (Show)