Обычно Control-C отправляет sigint программе и убивает ее, если она не обнаружена. Библиотека gnureadline установит обработчики для sigint. Однако даже при отключении этих обработчиков в haskell мне все равно нужно дважды нажать Control-C, чтобы убить программу. Что происходит?
import System.Console.Readline
main = do
setCatchSignals False
mainLoop
mainLoop = do
maybeLine <- readline ">"
case maybeLine of
Nothing -> putStrLn ":("
Just line -> do
putStr line
putStr " catch:"
catch <- getCatchSignals
putStrLn $ show $ catch
mainLoop