On Thu, Aug 12, 2010 at 1:25 PM, Wei Hu <wei.hoo@gmail.com> wrote:
Anyone care to explain why? I also tested a slightly changed program
pasted below, and am very confused.

> main = do
>   -- This call doesn't terminate, why?
>   print $ nonTermination "a"
>   -- Comment the above line to test the rest of the code
>   -- RTS detects the loop and bails out
>   print $ process "abc"
>   -- Comment the above line to test the rest of the code
>   inp <- readFile "input"
>   -- I'm guessing (process inp) throws an exception,
>   -- and the handler closes all files, making a second close fail?
>   writeFile "output" $ process inp

> process :: String ->  String
> process xs = blackhole where blackhole = tail blackhole

> nonTermination :: String -> String
> nonTermination _ = blackhole where blackhole = blackhole

If you compile the program to use the non-threaded RTS does the behavior change?

Jason