関数Applicative
関数Applicativeの定義
code:hs
instance Applicative ((->) r) where
pure x = (\_ -> x)
f <*> g = \x -> f x (g x)
pure :: b -> (a -> b)
constと同じ
(<*>) :: (a -> b -> c) -> (a -> b) -> (a -> c)
ap単体で使うケースを考える
1つの引数を2回適用させたいとき
例えば
code:hs
f n = (+n) (2*n) -- これを
f = (+) <*> (2*) -- こう書ける
と、思ったがこれ応用できる箇所めちゃくちゃ少ないか..mrsekut.icon
code:hs
-- これを
f n = ((compare . sum . divisors) n) (2*n)
code:hs
-- こう書くことで、ポイントフリーになる
g = ((compare . sum . divisors) <*> (2*))
括弧はわかり易さの為書いている
やっていることをメモしておくと
divisorsは約数を列挙する関数
code:hs
↑は約数の和
fmapは(.)と同じである
code:hs
(+) <$> (+3) <*> (*100) $ 5 --508
これが上手くハマるケースがあるのかどうかはわからないmrsekut.icon