fmap f = bind (return . f)
fmap f = bind (return . f)
を確認する。
まず、定義の確認
fmap :: (a -> b) -> (W a -> W b) --- {*4} fmap f (W x) = W (f x) --- {*1}
return :: a -> W a --- {*6} return x = W x --- {*3}
bind :: (a -> W b) -> (W a -> W b) --- {*7} bind f (W x) = f x --- {*2}
f :: a -> b --- {*5}
ポイントフルで確認
fmap f (W a) = {*1} W (f a)
bind ( return . f) (W x) = {*2} (return . f) x = {合成関数の定義} return ( f x) = {*3} W (f x)
ポイントフリーで確認
fmap :: (a -> b) -> (W a -> W b) --- {*4} | | 一番目のカッコがf {*5}に対応する | fmap f :: (W a -> W b)
return :: b -> W b --- {*6} f:: a -> b --- {*5} 上記2つの合成関数は return . f :: a -> W b bind :: (a -> W b) -> (W a -> W b) --- {*7} | | 一番目のカッコがreturn . f に対応する | bind (return . f ) :: (W a -> W b)