Wait!, I think that we should give him a hard time for using unsafeIO
bad Koen, bad Koen!
byron
On Wed, 18 Feb 1998, Alastair Reid wrote:
>
> Thanks for a very clear bug report - I'll bet it was no fun trying
> to isolate this problem!
>
> Koen Claessen ([EMAIL PROTECTED]) writes:
> > -- begin code
> >
> > module Bug where
> >
> > import IOExts
> >
> > main :: IO ()
> > main = writeFile "cat" buggy
> >
> > buggy :: String
> > buggy = unsafePerformIO $
> > do writeFile "cow" "Animal Farm"
> > return "horse"
> >
> > -- end code
> >
> > After running `main', you get an "unexpected signal", and Hugs crashes.
> >
> > The combination of the following two things causes the problem:
> >
> > - the writing to a file of an unsafe string,
> > - that when evaluated writes to another file.
> >
> > Either one of these things is no problem; [...]
>
> The problem is the implementation of writeFile which uses a global
> variable to keep track of which file it is writing to. This is
> perfectly ok if you're not using unsafePerformIO but obviously
> fatal otherwise.
>
> Rewriting the writeFile function as follows avoids this problem:
>
> writeFile :: String -> String -> IO ()
> writeFile fn s = do
> f <- openFile fn WriteMode
> hPutStr f s
> hClose f
>
> File reading doesn't seem to suffer from this problem.
>
> I'm afraid I don't plan to fix this right away - it'd require
> quite a bit of code rearranging and I'm deep in the bowels of
> the code generator/ evaluator at the moment. It shouldn't be
> a problem in the new system (see Hugs news page).
>
>
> --
> Alastair Reid Yale Haskell Project Hacker
> [EMAIL PROTECTED] http://WWW.CS.Yale.EDU/homes/reid-alastair/
>
>