Functor と Monad
某M氏とFunctorについて語っていたらふと疑問が。
(ネタにしてごめん…)
彼は今カテゴリーを勉強しているらしいので、
私などよりよっぽどまともな解を見出せるような気もするが、
まぁ、一応…。
とりあえず疑問に感じたのは、
fmap と liftM っておんなじやん?
ってこと。それぞれの型は、
fmap :: Functor f => (a -> b) -> f a -> f b liftM :: Monad m => (a -> b) -> m a -> m b
Functorかつ、Monadな型に対しては両者は同じように振舞うのかどうか。
その実はおのおのの実装によるが、果たして両者の実装を
変える事をよしとするデータが存在するのか。
普通にIOとか、リストとか、Maybeとかでは両者の実装は同じでよいと思う。
そうするとMonadなものは自動的に
fmapを持ちすればよいFunctorのインスタンスにすることが出来るということで…
というか、私は圏論を全く知らないので函手というものが
どういうものなのかも良くわからない。
そういうわけでこの辺にしておこう・・・
今度教えてもらうとするか。