<div>Hi,</div><div><br></div><div>The second time I press control-c, it isn&#39;t caught -- the program exits instead.  Why?</div><div><br></div><div>(The context is, I&#39;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 &gt;&gt; return ()) `C.catch` (\e -&gt; 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>