Haskell Language
カスタムデータ型の作成
サーチ…
シンプルなデータ型の作成
Haskellでカスタムデータ型を作成する最も簡単な方法は、 data
キーワードを使用するdata
です。
data Foo = Bar | Biz
型の名前はdata
と=
間で指定され、 型コンストラクタと呼ばれます。 After =
データ型のすべての値コンストラクタを指定します |
符号。 Haskellには、すべての型と値のコンストラクタが大文字で始まらなければならないというルールがあります。上記の宣言は次のように読むことができます:
Foo
という型を定義します。これには、Bar
とBiz
2つの値があります。
カスタムタイプの変数の作成
let x = Bar
上記の文は、型Foo
変数x
を作成します。タイプを確認して確認しましょう。
:t x
プリント
x :: Foo
値コンストラクタパラメータを使用したデータ型の作成
値コンストラクタは、データ型の値を返す関数です。このため、他の関数と同様に、1つ以上のパラメータを取ることができます。
data Foo = Bar String Int | Biz String
Bar
値コンストラクタの型を調べましょう。
:t Bar
プリント
Bar :: String -> Int -> Foo
Bar
が実際に関数であることが証明されます。
カスタムタイプの変数の作成
let x = Bar "Hello" 10
let y = Biz "Goodbye"
型パラメータを使用したデータ型の作成
型コンストラクタは、1つ以上の型パラメータを取ることができます:
data Foo a b = Bar a b | Biz a b
Haskellの型パラメータは、小文字で始まる必要があります。カスタムデータ型はまだ実際の型ではありません。タイプの値を作成するには、すべてのタイプパラメータを実際のタイプに置き換える必要があります。 a
とb
はどんな型でも構わないので、値コンストラクタは多相関数です。
カスタムタイプの変数の作成
let x = Bar "Hello" 10 -- x :: Foo [Char] Integer
let y = Biz "Goodbye" 6.0 -- y :: Fractional b => Foo [Char] b
let z = Biz True False -- z :: Foo Bool Bool
レコードパラメータを持つカスタムデータ型
名字、年齢、電話番号、通り、郵便番号、町があるデータ型Personを作成するとします。
我々は書くことができる
data Person = Person String String Int Int String String String
今、電話番号を取得したい場合は、関数を作成する必要があります
getPhone :: Person -> Int
getPhone (Person _ _ _ phone _ _ _) = phone
まあ、これは楽しいことではありません。私たちはパラメータを使ってうまくいく:
data Person' = Person' { firstName :: String
, lastName :: String
, age :: Int
, phone :: Int
, street :: String
, code :: String
, town :: String }
ここで、関数のphone
を取得します
:t phone
phone :: Person' -> Int
私たちは今、私たちが望むものを何でもすることができます:
printPhone :: Person' -> IO ()
printPhone = putStrLn . show . phone
パターンマッチングで電話番号をバインドすることもできます。
getPhone' :: Person' -> Int
getPhone' (Person {phone = p}) = p
パラメータを簡単に使用するには、 RecordWildCards