read-eval-print ループを持つコマンド ライン プログラムと Haskell を接続しようとしています。入力ハンドルにテキストを入力し、プロンプトが見つかるまで出力ハンドルから読み取ります (その後、繰り返します)。プロンプトが見つかるまで読み取りはブロックされますが、それ以上はブロックされません。プロンプトを作成するまで一度に 1 文字ずつ読み取る独自の小さなステート マシンをコーディングする代わりに、Parsec または Attoparsec を使用すると便利です。(問題の 1 つは、プロンプトが時間の経過とともに変化することです。そのため、一定の文字列をチェックすることはできません。)
出力ハンドルから適切な量のデータを読み取り、それをパーサーに渡す最良の方法は何ですか? ほとんどのハンドル読み取りプリミティブでは、読み取るデータの量を事前に決定する必要があるため、混乱しています。しかし、いつ停止するかを決定するのはパーサーです。