char get / putメソッドを使用しているために予想されるコードの一部は、すべての入力文字で応答するはずですが、そうではないようです。むしろ、改行を待ってから文字列全体を実行しますが、これは私にはまったく意味がありません...
私は何が間違っているのですか?これを各入力文字に反応させるにはどうすればよいですか?
main = repeatUntilExit stdin stdout putChar ""
repeatUntilExit :: Handle -> Handle -> (Char -> IO ()) -> [Char] -> IO ()
repeatUntilExit hIn hOut f "exit\n" = hPutStrLn hOut "bye\n"
repeatUntilExit hIn hOut f x = hGetChar hIn >>= \c -> f c >> repeatUntilExit hIn hOut f (appendToLastFive c)
where appendToLastFive a = (reverse . (:)a . take 4 . reverse) x
結果は次のとおりです。
C:\temp>echo.exe
an entire line of text
an entire line of text
exit
exit
bye
C:\temp>