M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

型、型名、型コンストラクタ…

先日の引用と若干矛盾しているようにも思うんだけど、型を宣言するときの型名と型コンストラクタのちがいに触れたパラグラフ(たぶん先日の引用テキストが不親切なだけだと思うけど)。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

〔…〕型コンストラクタは型を引数に取って新しい型を作るものです。〔…〕型引数がどう使われるか明確なイメージをつかむために、すでに知っている型がどんな実装になっているか見てみましょう。

data Maybe a = Nothing | Just a

このaが型引数です。そして型引数を取っているので、Maybeは型コンストラクタと呼ばれます。Nothingでない場合に何をこのデータ型に保持させたいかに応じて、この型コンストラクタからMaybe Int、Maybe Stringなどの型を作れます。単なるMaybeという型の値は存在できません。なぜなら、Maybeは型コンストラクタであって、型ではないからです。型コンストラクタは、すべての引数を埋めて初めて何かしらの値の型になれます。

これは例えば、次のような型宣言は型と型コンストラクタが事実上同一であるケース(具体型)と考えればいいのかな?(前回ポストのサンプルコード)

data BookInfo = Book Int String [String]
                deriving (Show)