<div>Hi,</div><div><br></div><div>The second time I press control-c, it isn't caught -- the program exits instead. Why?</div><div><br></div><div>(The context is, I'm writing an interactive program where calculations may take a long time. Control-c during a calculation should return the user to a prompt. As things stand, this can only be done once -- the second calculation so interrupted causes the whole program to exit.)</div>
<div><br></div><div>$ ./ctrlctest</div><div>^Cuser interrupt</div><div>^C -- program exits!</div><div>$ cat ctrlctest.hs</div><div>module Main where</div><div><br></div><div>import Control.Concurrent (threadDelay)</div>
<div>import qualified Control.Exception as C</div><div><br></div><div>main :: IO ()</div><div>main = do (threadDelay 1000000 >> return ()) `C.catch` (\e -> print (e::C.AsyncException))</div><div> main</div>
<div><br></div><div>$ ghc --version</div><div>The Glorious Glasgow Haskell Compilation System, version 7.0.3</div><div>$ uname -mrsv</div><div>Darwin 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug 9 20:54:00 PDT</div><div>
2011; root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64</div><div><div>$ file ctrlctest</div><div>ctrlctest: Mach-O executable i386</div></div><div><br></div>