謎のコンパイルエラーにしばらく悩まされたが、原因はhaskelineパッケージのSystem.Console.Haskeline.MonadExceptionが定義している MonadException m => MonadException (StateT s m) というインスタンスのStateTが、lazyなものではなくstrictなものになっていたため。 WriterTやRWSTに関するインスタンスでは普通にlazyなものを使っていたのでてっきりこれもそうだと思って騙された! 何故StateTだけstrictなものを使っているのだろう……?

http://hackage.haskell.org/package/haskeline-0.7.1.3/docs/System-Console-Haskeline-MonadException.html