Haskell 始めてみる(03)
型構築子 / データ構築子
A Gentle Introduction to Haskell: Values and Typesより。
Haskellでは
data
宣言を使って、ユーザ自身が型を定義することができます。data Bool = False | True型
Bool
は(無引数) 型構築子の例です。また、True
やFalse
は(無引数)データ構築子の例です。
同じようにして、色の型を定義しましょう。data Color = Red | Green | Blue | Indigo | Violet
だそうである。
data
宣言の左辺に出てくるのが型構築子で、右辺に出てくるのがデータ構築子ということでいいですかね。右辺のデータ構築子に実引数を渡してやると(この場合は無引数)、Color
型の値になる。
一見すると、Bool
や、Color
の定義をやってるように見える。
すると当然、右辺に出てくるFalse
、True
、Red
、Green
... たちは、どこで定義されてるのかと疑問に思うわけですが、そんな説明は全然無い。
説明がないのであきらめて、ghci
で確認してみました。
Prelude> :l type.hs Compiling Main ( type.hs, interpreted ) Ok, modules loaded: Main.
何のエラーも無くload
できました。あー、合ってるんだなぁ。釈然としない。
すっきりしないながらも、ふと、試しに Color
型の値を作ってみようと思いたった。
color = Red
…こう書かざるを得ない。Red
の定義が無く、一体なんなのかわからないのに、これで Color
型ができてしまう。
と、Color
型の値を作った瞬間、わかった気がした。
data
宣言は、左辺の型構築子を定義しているというよりは、型構築子とデータ構築子の「関係」を定義していると思えばよくて、それぞれが「何」なのかは気にしないでよいと思えばいいんじゃないか?
その解釈で改めてdata
宣言を読むと、
data Color = Red | Green | Blue
Color
型の値を作りたきゃ、c = Red
と書くかc = Green
と書くかc = Blue
と書け。
逆に言うと、c = Red
とかc = Green
とかc = Blue
と書くと、c
の型はColor
になってしまうぞ。
となる。
うん。個人的にはこれですっきりした。
多分続く。