データ構成子の引数は具体的な型じゃなくて型変数でもかまわない。
data Cream a b c = Eric a | Jack b | Ginger c deriving (Show)
*Main> [Eric 10, Ginger 'g', Jack 2.4] [Eric 10,Ginger 'g',Jack 2.4] *Main> [Eric 1.2, Ginger 3, Jack "2.4"] [Eric 1.2,Ginger 3,Jack "2.4"] *Main> [Eric 1.2, Ginger 3.1, Jack 2.4] [Eric 1.2,Ginger 3.1,Jack 2.4]
引数にどんな型がきてもOK。
ただし,型変数は = の左側にも書いておなかなければいけない。↓の例では c が無いのでエラーになる。
data Cream a b = Eric a | Jack b | Ginger c deriving (Show)
*Main> :l datatype.hs Compiling Main ( datatype.hs, interpreted ) datatype.hs:1:42: Not in scope: type variable `c' Failed, modules loaded: none.