読者です 読者をやめる 読者になる 読者になる

IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Applicativeファンクタを使って見る

最初の取っ掛かりとして、Applicativeファンクタの例としてわかりやすいのは、データコンストラクタを使う例ではないかと。

データ型を定義

> :i Emp
data Emp = Emp {first_name :: String, last_name :: String}
    -- Defined at testapp01.hs:1:6
instance Show Emp -- Defined at testapp01.hs:1:73

データコンストラクの型を確認

> :t Emp
Emp :: String -> String -> Emp

インスタンスを作る

> Emp "James" "Butt"
Emp {first_name = "James", last_name = "Butt"}

ここで、first_nameやlast_nameがないことも想定することを考える。データコンストラクタの入力にJust "James"Nothingの場合があり、インスタンスとしては、Just {first_name = "James", last_name = "Butt"}Nothingを期待する。

この時に、Applicativeが使える。

> Emp <$> (Just "James") <*> (Just "Butt")
Just (Emp {first_name = "James", last_name = "Butt"})
> Emp <$> Nothing  <*> (Just "Butt")
Nothing
> Emp <$> (Just "James") <*> Nothing
Nothing
> Emp <$> ["James", "Josephine"] <*> ["Butt","Darakjy"] 
[Emp {first_name = "James", last_name = "Butt"},Emp {first_name = "James", last_name = "Darakjy"},Emp {first_name = "Josephine", last_name = "Butt"},Emp {first_name = "Josephine", last_name = "Darakjy"}]