Captura de Control-C excepción en GHC (Haskell)

Construí un bucle realmente simple de lectura-evaluación-impresión en Haskell que atrapa Control-C (UserInterrupt). Sin embargo, cada vez que compilo y ejecuto este programa, siempre atrapa el primer Control-C y siempre aborta en el segundo Control-C con el código de salida 130. No importa cuántas líneas de entrada le dé antes y entre los dos. Control-Cs, siempre sucede de esta manera. Sé que me falta algo simple ... por favor ayuda, gracias!

Nota: esto es con excepciones de base 4, por lo que Control.Exception y no 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

Respuestas a la pregunta(3)

Su respuesta a la pregunta