Haskell dataで型を作成する【Haskell data 型作成】

Haskelldataについて

Haskelldata コマンドは既存の型を組み合わせて新しい型を作ることが出来ます。

data Animal = Cat Int 

scream :: Animal -> String
scream (Cat number ) = concat (replicate number "ニャー")

main = print $ scream(Cat 2)

上記の例ではAnimalという普遍的なデータ型を作成し、 その中の一種類としてCatIntを組み合わせたもの(numberの意図は頭数)を指定しています。

そして関数screamの型宣言ではAnimalからStringへの型変更を示し 関数の実態では、Catnumberを指定された場合は"ニャー"という文字列を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を拡張し、CatDogのパターンにも対応しています。

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