Monad 変換子を使って List Monad でロギングできるようにする

Monad 変換子を使う練習として、 List Monad の中で Writer Monad を使ってロギングできるように変換してみる。

まず、題材として、葉の数が n である二分木の全ての組み合わせの数を返す count 関数を定義。

ここで count 関数の do 式での処理過程を Writer Monad を使ってロギングしたいとする。そこで、 Writer Monad を ListT Monad に変換して ListT (Writer [String]) Int 型で Monad を組むようにすると、

と、望みの結果を得ることができた。