>>813
> 射の結合(.)とその単位元(id)は切っても切れない関係のような気がするけど。

圏としてとらえるならば(それはCategoryクラスの名前にかなったこと)、たしかに(.)とidが必要。
でも、圏としてとらえる以前に連結? 合成? できる有向グラフとしてとらえることもできるはずで、その場合は(.)はいるだろうけど、idはいらないんじゃないかな。

議論のために考えた例だけど、例えば
data Foo = Foo ...
data Bar a b = Bar {
runBar :: a -> (b, Foo)
}

のような型があった場合、Barに(.)を定義するのは簡単だが、直感的に自然な形でidが定義できるとは限らないでしょう?

>>815
ここ↓によれば
http://snak.tdiary.net/20091020.html

fmap = liftM は、FunctorでもMonadでもある型では必須の要件らしい。