I get Manuel's error as well.

Cheers,
Edward

Excerpts from Simon Peyton-Jones's message of Fri Jun 10 13:22:38 -0400 2011:
> I did, yes. Works ok for me.  'forever' does has an INLINABLE pragma..
> so I'm confused
> 
> S
> 
> | -----Original Message-----
> | From: Manuel M T Chakravarty [mailto:[email protected]]
> | Sent: 10 June 2011 02:08
> | To: Simon Peyton-Jones
> | Cc: [email protected]
> | Subject: Re: [commit: base] master: Make 'forever' inlinable (fixes Trac 
> #5205)
> | (ae10342)
> | 
> | Simon,
> | 
> | Did you validate this?  I get
> | 
> | > libraries/base/GHC/ST.lhs:78:1:
> | >     You cannot SPECIALISE `forever'
> | >       because its definition has no INLINE/INLINABLE pragma
> | >       (or you compiled its defining module without -O)
> | > make[1]: *** [libraries/base/dist-install/doc/html/base/base.haddock] 
> Error 1
> | 
> | with a standard validate run on Mac OS X using 7.0.3 as the bootstrap 
> compiler.
> | 
> | Manuel
> | 
> | 
> | 
> | > Repository : ssh://darcs.haskell.org//srv/darcs/packages/base
> | >
> | > On branch  : master
> | >
> | >
> | 
> http://hackage.haskell.org/trac/ghc/changeset/ae10342b49b95393b09ffee8df8c84740969996
> | 8
> | >
> | >> ---------------------------------------------------------------
> | >
> | > commit ae10342b49b95393b09ffee8df8c847409699968
> | > Author: Simon Peyton Jones <[email protected]>
> | > Date:   Thu Jun 9 20:44:21 2011 +0100
> | >
> | >    Make 'forever' inlinable (fixes Trac #5205)
> | >
> | >    See Note [Make forever INLINABLE] in Control.Monad
> | >
> | >> ---------------------------------------------------------------
> | >
> | > Control/Monad.hs |   18 ++++++++++++++++++
> | > GHC/ST.lhs       |    4 ++++
> | > 2 files changed, 22 insertions(+), 0 deletions(-)
> | >
> | > diff --git a/Control/Monad.hs b/Control/Monad.hs
> | > index 2bbfc57..75b9d0b 100644
> | > --- a/Control/Monad.hs
> | > +++ b/Control/Monad.hs
> | > @@ -189,8 +189,26 @@ f >=> g     = \x -> f x >>= g
> | >
> | > -- | @'forever' act@ repeats the action infinitely.
> | > forever     :: (Monad m) => m a -> m b
> | > +{-# INLINABLE forever #-}  -- See Note [Make forever INLINABLE]
> | > forever a   = a >> forever a
> | >
> | > +{- Note [Make forever INLINABLE]
> | > +
> | > +If you say   x = forever a
> | > +you'll get   x = a >> a >> a >> a >> ... etc ...
> | > +and that can make a massive space leak (see Trac #5205)
> | > +
> | > +In some monads, where (>>) is expensive, this might be the right
> | > +thing, but not in the IO monad.  We want to specialise 'forever' for
> | > +the IO monad, so that eta expansion happens and there's no space leak.
> | > +To achieve this we must make forever INLINABLE, so that it'll get
> | > +specialised at call sites.
> | > +
> | > +Still delicate, though, because it depends on optimisation.  But there
> | > +really is a space/time tradeoff here, and only optimisation reveals
> | > +the "right" answer.
> | > +-}
> | > +
> | > -- | @'void' value@ discards or ignores the result of evaluation, such as 
> the
> | return value of an 'IO' action.
> | > void :: Functor f => f a -> f ()
> | > void = fmap (const ())
> | > diff --git a/GHC/ST.lhs b/GHC/ST.lhs
> | > index dc62000..a66a5f8 100644
> | > --- a/GHC/ST.lhs
> | > +++ b/GHC/ST.lhs
> | > @@ -20,6 +20,7 @@ module GHC.ST where
> | >
> | > import GHC.Base
> | > import GHC.Show
> | > +import Control.Monad( forever )
> | >
> | > default ()
> | > \end{code}
> | > @@ -74,6 +75,9 @@ instance Monad (ST s) where
> | >
> | > data STret s a = STret (State# s) a
> | >
> | > +{-# SPECIALISE forever :: ST s a -> ST s b #-}
> | > +-- See Note [Make forever INLINABLE] in Control.Monad
> | > +
> | > -- liftST is useful when we want a lifted result from an ST computation.  
> See
> | > -- fixST below.
> | > liftST :: ST s a -> State# s -> STret s a
> | >
> | >
> | >
> | > _______________________________________________
> | > Cvs-libraries mailing list
> | > [email protected]
> | > http://www.haskell.org/mailman/listinfo/cvs-libraries
> | 
> 

_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to