IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

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)