generated at
Applicative Styleの練習



>問題


hs
do a <- [1,2,3] b <- [4,5,6] pure (max a b)



hs
do a <- Just 1 b <- Just 2 pure (a+b)




hs
do 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



hs
pure (+) <*> Right 10 <*> Right 20
doではなくpureを使ったものの書き換え


hs
do x <- Just 0 xs <- Just [1,2,3] pure (x:xs)


hs
do x <- Just 5 pure [x]


>回答


hs
max <$> [1,2,3] <*> [4,5,6]
最も基本的な書き換え
2つの引数を取る 普通の関数 に、2つの アプリカティブ値 を適用している




hs
(+) <$> Just 1 <*> Just 2
記号だとしても同じ



hs
add3 <$> Just 1 <*> Just 2 <*> Just 3
引数の数が増えても同じ
<*> で連結していくだけ



hs
(+) <$> Right 10 <*> Right 20
pureで持ち上げてから適用するのではなく、そのまま <$> を使えば良い



hs
(:) <$> Just 0 <*> Just [1,2,3]
consでも同じ




hs
(:[]) <$> Just 5
いったん以下を経由すればわかりやすい?
hs
do x <- Just 5 pure (x:[])
ただ、ここで (:) x [] ではなく、 (:[]) 自体を関数と見なすことがポイント
前者として捉えると以下のようになってしまう
hs
(:) <$> Just 5 <*> Just []