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"}]