モナドの遷移

モナドファミリーの操作を図にしてみた。僕が言うのもオコガマシイが、図で満足せずにソースコードをみると、さらなる発見があって面白い。気になったモナドは、Hoogleで「ホグれ」。

一般のモナド

f:id:babyron64:20171016022619p:plain

ErrorT

f:id:babyron64:20171016225220p:plain

大事なことは、ErrorT eでも、ErrorT e m aでもなく、ErrorT e mがモナド(のインスタンス)だということ。だから、右側のreturnでは、値を一気に最上層まで持ち上げられる。

m a層とm (Either e a)層は、説明の都合上、隣接した位置関係になっているが、returnでm aをm (Either e a)に持ち上げることはできないので、注意(当たり前)。また、a層からm (Either e a)層に持ち上げるときに、return . Rightを使っているが、型宣言m (Either e a)でEitherモナドが明示されているので、return . returnでも同じ。