Ich habe eine wirklich einfache Lese-Eval-Print-Schleife in Haskell, die Control-C (UserInterrupt) fängt. Jedes Mal, wenn ich dieses Programm kompiliere und ausführe, fängt es immer das erste Control-C ab und bricht immer auf dem zweiten Control-C mit dem Exit-Code 130 ab. Es spielt keine Rolle, wie viele Zeilen des Inputs ich vor und zwischen den beiden gebe Control-Cs, es passiert immer so. Ich weiß, dass ich etwas Einfaches vermissen muss ... bitte helfen, danke!Catching Control-C Ausnahme in GHC (Haskell)
Hinweis: Dies ist mit Base-4-Ausnahmen, also Control.Exception und nicht 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
Dieser Code wird nicht einmal mit GHC 6.8 kompilieren, importieren 'Control.Exception' und' IO'. –
@Norman, GHC 6.12 * ist * out. Es ist nicht in der Haskell-Plattform enthalten, aber es ist bereits für Arch und Debian Instable verfügbar. –
Warum installieren Sie nicht Ihren eigenen Signal-Handler? http://therning.org/magnus/archives/285 –