趣味で作っている JSON パーサー、現実的なことを考えると文字を一文字読み取る処理は失敗する可能性があるので、Iterator Char を渡すインターフェースから Iterator (Result :e Char) を渡すインターフェースにするという工事をしてた。
ロジック部分はモナドを使って実装しているのだけど、このレベルの仕様変更をしてもロジック部分に一切手を加える必要がなかった。
モナドすごいのでは。
https://github.com/tojoqk/json/commit/418fdd6b4b9f33bb9db2da3ee8a48c7ed7910ba0