[Haskell-cafe] Re: Where do I put the seq?

Simon Peyton-Jones simonpj at microsoft.com
Fri Aug 21 06:11:46 EDT 2009


Actually GHC *does* pass around a RealWorld token right through the optimiser.  Just at the moment of code generation we drop it, so that it's not *actually* passed. But for almost all of compilation it's just as if it *was*.

Simon

| -----Original Message-----
| From: haskell-cafe-bounces at haskell.org [mailto:haskell-cafe-bounces at haskell.org] On
| Behalf Of Lennart Augustsson
| Sent: 21 August 2009 11:04
| To: Peter Verswyvelen
| Cc: Bayley, Alistair; The Haskell Cafe
| Subject: Re: Re[2]: [Haskell-cafe] Re: Where do I put the seq?
| 
| You need a lot of magic to make the IO monad efficient.
| You don't really want to pass around (and pattern match on) a
| RealWorld token, that would be inefficient.
| 
| 
| On Fri, Aug 21, 2009 at 11:04 AM, Peter Verswyvelen<bugfact at gmail.com> wrote:
| > IO also seems to use unboxed (hence strict?) tuples
| >
| > newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))
| >
| > Not sure if this is just for performance, but if the strictness is required,
| > here we have the horrible hack again then (would behave different without
| > it?). I guess it works because when applying primitive function likes
| > putChar#, these could be considered as fully strict, since putChar# c really
| > does force evaluation of c strictly and puts in the screen. This is
| > different from the lazy IO situation, where a string is concatenated lazily,
| > and put on the screen by the consumer as soon as it's available. Ah I'm
| > having troubles to explain myself formally, never mind :)
| > Actually RealWorld is not defined in that file, it is defined here, but
| > hidden
| > file:///C:/app/ghp/doc/libraries/ghc-prim/GHC-Prim.html#t%3ARealWorld
| > But I don't understand the comment
| > data RealWorld Source
| > RealWorld is deeply magical. It is primitive, but it is
| > not unlifted (hence ptrArg). We never manipulate values of type RealWorld;
| > it's only used in the type system, to parameterise State#.
| > Maybe I should reread the papers, but it seems lots of magic is needed to
| > get IO right (such as the existential types to make sure different state
| > threads are kept separate)
| > On Fri, Aug 21, 2009 at 10:52 AM, Bayley, Alistair
| > <Alistair.Bayley at invesco.com> wrote:
| >>
| >> > From: haskell-cafe-bounces at haskell.org
| >> > [mailto:haskell-cafe-bounces at haskell.org] On Behalf Of Bulat Ziganshin
| >> > To: Peter Verswyvelen
| >> >
| >> > > But how does GHC implement the RealWorld internally? I guess
| >> >
| >> > look the "base" library sources for "RealWorld"
| >>
| >> http://www.haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-IOBas
| >> e.html#IO
| >> *****************************************************************
| >> Confidentiality Note: The information contained in this message,
| >> and any attachments, may contain confidential and/or privileged
| >> material. It is intended solely for the person(s) or entity to
| >> which it is addressed. Any review, retransmission, dissemination,
| >> or taking of any action in reliance upon this information by
| >> persons or entities other than the intended recipient(s) is
| >> prohibited. If you received this in error, please contact the
| >> sender and delete the material from any computer.
| >> *****************************************************************
| >>
| >
| >
| > _______________________________________________
| > Haskell-Cafe mailing list
| > Haskell-Cafe at haskell.org
| > http://www.haskell.org/mailman/listinfo/haskell-cafe
| >
| >
| _______________________________________________
| Haskell-Cafe mailing list
| Haskell-Cafe at haskell.org
| http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list