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: [email protected] 
[mailto:[email protected]] 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<[email protected]> 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
| > <[email protected]> wrote:
| >>
| >> > From: [email protected]
| >> > [mailto:[email protected]] 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
| > [email protected]
| > http://www.haskell.org/mailman/listinfo/haskell-cafe
| >
| >
| _______________________________________________
| Haskell-Cafe mailing list
| [email protected]
| http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to