Monad 変換子を使う練習として、 List Monad の中で Writer Monad を使ってロギングできるように変換してみる。
まず、題材として、葉の数が n である二分木の全ての組み合わせの数を返す count 関数を定義。
ここで count 関数の do 式での処理過程を Writer Monad を使ってロギングしたいとする。そこで、 Writer Monad を ListT Monad に変換して ListT (Writer [String]) Int 型で Monad を組むようにすると、
と、望みの結果を得ることができた。