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のインスタンスにすることが出来るということで…


というか、私は圏論を全く知らないので函手というものが
どういうものなのかも良くわからない。
そういうわけでこの辺にしておこう・・・
今度教えてもらうとするか。