構文解析器を題材に、ナイーブな実装を分解し、構成的なパーサへと組み替える過程を示します。
ナイーブな実装では、入力状態の管理、エラー処理、処理の合成といった関心が同じ制御フローに入り込み、分岐が増殖します。その結果、処理の再利用や合成が難しくなります。本セッションでは、このような実装を出発点に、コードとともに段階的に分解します。
分解の過程では、状態・失敗・合成という異なる性質として捉え直します。状態は逐次的な変化、失敗は分岐の可能性、合成は構造の組み合わせとして切り分け、それぞれを独立に記述します。
分離した構造を再び組み合わせる段階では、モナドやApplicativeといった抽象が、合成を記述するための枠組みとして現れます。この流れから、状態・失敗・合成を分離するための手順を整理します。
崩れた設計を整えていく過程の中で、抽象がどのように立ち上がるかを追います。この視点は構文解析に限らず、関心の分離と合成を扱う設計全般に応用できます。