Я построил очень простой цикл read-eval-print в Haskell, который ловит Control-C (UserInterrupt). Однако всякий раз, когда я компилирую и запускаю эту программу, она всегда захватывает первый Control-C и всегда прерывает второй Control-C с кодом выхода 130. Неважно, сколько строк ввода я даю ему до и между двумя Control-Cs, так всегда бывает. Я знаю, что я должен пропустить что-то простое... пожалуйста, помогите, спасибо!
Примечание: это с исключениями base-4, поэтому Control.Exception и не Control.OldException.
import Control.Exception as E
import System.IO
main :: IO ()
main = do hSetBuffering stdout NoBuffering
hSetBuffering stdin NoBuffering
repLoop
repLoop :: IO ()
repLoop
= do putStr "> "
line <- interruptible "<interrupted>" getLine
if line == "exit"
then putStrLn "goodbye"
else do putStrLn $ "input was: " ++ line
repLoop
interruptible :: a -> IO a -> IO a
interruptible a m
= E.handleJust f return m
where
f UserInterrupt
= Just a
f _
= Nothing