レクサーフェーズと解析フェーズを1つのフェーズに混在させると、Parsecパーサーが読みにくくなるだけでなく、速度が低下することがあります。1つの解決策は、Alexをトークナイザーとして使用し、次にParsecをトークンストリームのパーサーとして使用することです。
これは問題ありませんが、コンパイルパイプラインに前処理フェーズが1つ追加されたり、haskellの「IDE」とうまく統合されなかったりするため、Alexを取り除くことができればさらに良いでしょう。アレックスのスタイルで、しかしライブラリとして、トークナイザーを記述するためのhaskellEDSL。