Haskellのdata
について
Haskellのdata
コマンドは既存の型を組み合わせて新しい型を作ることが出来ます。
data Animal = Cat Int scream :: Animal -> String scream (Cat number ) = concat (replicate number "ニャー") main = print $ scream(Cat 2)
上記の例ではAnimal
という普遍的なデータ型を作成し、
その中の一種類としてCat
とInt
を組み合わせたもの(numberの意図は頭数)を指定しています。
そして関数scream
の型宣言ではAnimal
からString
への型変更を示し
関数の実態では、Cat
とnumber
を指定された場合は"ニャー"という文字列をnumber
の数だけ繰り返しました。
上記はCat
つまり、動物の中でも猫しか対応していませんが、型Animal
の選択肢を増やすこともできます。
data Animal = Cat Int | Dog Int scream :: Animal -> String scream (Cat number ) = concat (replicate number "ニャー") scream (Dog number ) = concat (replicate number "wanwan") main = do print(scream(Cat 2)) print(scream(Dog 2))
上記はデータ型Animal
を拡張し、Cat
とDog
のパターンにも対応しています。
dataコマンドの普遍的な使い方
data
コマンドを普遍的な書き方を
data TypeName = Constructor1 Type1 | Constructor2 Type2 | ... | ConstructorN TypeN
- TypeName は新しい型の名前です
- Constructor はデータ型のコンストラクタです。それぞれのコンストラクタは、データ型が取りうる値を定義します。
- Type1 はそれぞれのコンストラクタが持つデータ型です。
dataコマンドによる辞書宣言
dataコマンドは{}
キーワードを用いて辞書型のような型宣言を行うことができます。
data PC = PC{ OS :: String, cpu :: Int } mypc = PC { OS = "Windows OS", cpu = 4 } main = do print $ OS mypc -- 出力: Windows OS print $ OS cpu -- 出力: 4