Перехват исключения Control-C в GHC (Haskell)

Я построил действительно простой цикл read-eval-print-loop в Haskell, который перехватывает Control-C (UserInterrupt). Однако всякий раз, когда я компилирую и запускаю эту программу, она всегда перехватывает первый Control-C и всегда прерывает работу на втором Control-C с кодом выхода 130. Неважно, сколько строк ввода я передаю до и между двумя Control-C, это всегда происходит таким образом. Я знаю, что я пропускаю что-то простое ... пожалуйста, помогите, спасибо!

Примечание: это с исключениями 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

Ответы на вопрос(3)

Ваш ответ на вопрос