Hi, thanks for a very fine bug report. The bug has now been fixed & the upcoming release should have it included.
--sigbjorn ----- Original Message ----- From: "Ulf Norell" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Monday, December 03, 2001 03:48 Subject: fixST bug in win32. > > Hi. > > Short story > ----------- > > fixST does not work in Win32 implementation. > > Hugs version > ------------ > > I installed hugs from the Windows Installer package found at > > http://www.cse.ogi.edu/PacSoft/projects/Hugs/downloads/hugs98-Feb2001.msi > > The same problem seems to be present also in the February 2000 release. > > Specs > ----- > > I am running Windows 2000 Professional (Service Pack 2) on an Athlon > Thunderbird machine. > > Details > ------- > > When using (strict) ST i get the following: > > ST> runST (fixST (\_ -> return 1)) > Show_default_show (Make.Show (Show_default_show (Make.Show ({Interrupted!} > > ST> $$ > () > ST> $$ > > Program error: {_Gc Black Hole} > > ST> $$ > () > ST> $$ > () > ST> $$ > 1 > ST> $$ > > Unexpected signal > > C:\Source\Haskell> > > It is also possible to get a control stack overflow. Another fascinating > example is the following: > > funny = do ones <- fixST (\xs -> return (1:xs)) > return (take 10 ones) > > Main> runST funny > > Program error: Prelude.take: negative argument > > Main> > > After doing this a few times you get an Unexpected signal. > > The LazyST module is a little more well-behaved (?). Instead of the > unexpected signal you get control stack overflow in the first example, > and the second example always gives the program error. > > If you define the above examples as functions (non-updatable) > > test1 _ = fixST (\_ -> return 1) > funny _ = do xs <- fixST (\xs -> return (1:xs)) > return (take 10 xs) > > Main> runST (test1 ()) > 1 > Main> runST (funny ()) > > Program error: Prelude.take: negative argument > > The first example works while the second still gives an error. Now (of > course) you get the same result every time. > > If you redefine funny using ($) in the fixST application it works a little > better: > > funny' _ = do xs <- fixST $ \xs -> return (1:xs) > return (take 10 xs) > > Main> runST (funny' ()) > [1 > Program error: Prelude.take: negative argument > > Best Regards > Ulf Norell > > /----------------\ /-----------------------\ > ( Ulf Norell | 031-18 68 74 ) > ( Uppstigen 108-21 | 073-676 40 54 ) > ( 412 80 G�teborg | [EMAIL PROTECTED] ) > \----------------/ \-----------------------/ > > > _______________________________________________ > Hugs-Bugs mailing list > [EMAIL PROTECTED] > http://www.haskell.org/mailman/listinfo/hugs-bugs _______________________________________________ Hugs-Bugs mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/hugs-bugs
