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<bugf...@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.bay...@invesco.com> wrote: >> >> > From: haskell-cafe-boun...@haskell.org >> > [mailto:haskell-cafe-boun...@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@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe