もう眠いので http://d.hatena.ne.jp/hiratara/20121118/1353252127 から要点だけ抜粋。
関手の合成はf gって書いてFunctorになってくれればありがたいのにそうもいかないのでこれ使う。
自然変換の水平合成はライブラリ見つけられなかったので誰か教えて下さい。。。
自分で書いたらこうなった。
natComp :: (Functor m1, Functor m2, Functor m3, Functor m4) =>
(forall a.m1 a -> m2 a) -> (forall a.m3 a -> m4 a)
-> (forall a.m3 (m1 a) -> m4 (m2 a))
s `natComp` t = (fmap s) . t