Applicative Styleの練習
hsdo
a <- [1,2,3]
b <- [4,5,6]
pure (max a b)
hsdo
a <- Just 1
b <- Just 2
pure (a+b)
hsdo
a <- Just 1
b <- Just 2
c <- Just 3
pure $ add3 a b c
--
add3 :: Int -> Int -> Int -> Int
add3 n1 n2 n3 = n1 + n2 + n3
hspure (+) <*> Right 10 <*> Right 20
doではなくpureを使ったものの書き換え
hsdo
x <- Just 0
xs <- Just [1,2,3]
pure (x:xs)
hsdo
x <- Just 5
pure [x]
hsmax <$> [1,2,3] <*> [4,5,6]
最も基本的な書き換え
2つの引数を取る 普通の関数
に、2つの アプリカティブ値
を適用している
hs(+) <$> Just 1 <*> Just 2
記号だとしても同じ
hsadd3 <$> Just 1 <*> Just 2 <*> Just 3
引数の数が増えても同じ
<*>
で連結していくだけ
hs(+) <$> Right 10 <*> Right 20
pureで持ち上げてから適用するのではなく、そのまま <$>
を使えば良い
hs(:) <$> Just 0 <*> Just [1,2,3]
consでも同じ
いったん以下を経由すればわかりやすい?
hsdo
x <- Just 5
pure (x:[])
ただ、ここで (:) x []
ではなく、 (:[])
自体を関数と見なすことがポイント
前者として捉えると以下のようになってしまう
hs(:) <$> Just 5 <*> Just []