[Haskell-cafe] FW: GHC.Prim.realWorld
Simon Peyton-Jones
simonpj at microsoft.com
Mon May 9 12:44:10 EDT 2005
| I'd like to know what the function GHC.Prim.realWorld does exactlly
| in the STG code below:
Think of it as a fixed value. We want the join point $w$j to be a
function, with at least one argument, otherwise it'll be evaluated
eagerly (since it has a primitive type), which is semantically wrong.
It's rather like saying (\().e), only cheaper, because passing ()
requires you to actually pass a value, whereas the 'realword' token has
a type that says "you don't need to pass anything at runtime".
GHC.Prim is a built-in module for functions and types that can't be
defined in Haskell.
The functions in GHC.Prim are enumerated in
ghc/compiler/prelude/primops.txt.pp
Simon
|
| PrelBase.divInt# =
| \r [x# y#]
| let-no-escape {
| $w$j =
| sat-only \r [w]
| case <# [x# 0] of wild {
| GHC.Base.False -> quotInt# [x# y#];
| GHC.Base.True ->
| case ># [y# 0] of wild1 {
| GHC.Base.True ->
| case +# [x# 1] of sat_s10t {
| __DEFAULT ->
| case quotInt# [sat_s10t y#] of
sat_s10w {
| __DEFAULT -> -# [sat_s10w 1];
| };
| };
| GHC.Base.False -> quotInt# [x# y#];
| };
| };
| } in
| case ># [x# 0] of wild {
| GHC.Base.False -> $w$j GHC.Prim.realWorld#;
| GHC.Base.True ->
| case <# [y# 0] of wild1 {
| GHC.Base.True ->
| case -# [x# 1] of sat_s10I {
| __DEFAULT ->
| case quotInt# [sat_s10I y#] of sat_s10L {
| __DEFAULT -> -# [sat_s10L 1];
| };
| };
| GHC.Base.False -> $w$j GHC.Prim.realWorld#;
| };
| };
|
| Finally, where is the module GHC.Prim defined ? I've looked for it
| in GHC source directories but I haven't found it. Is it part of the
| runtime system ?
|
| Thanks in advance,
|
| --
| ________________________________
| Monique Louise B.Monteiro
| Msc Student in Computer Science
| Center of Informatics
| Federal University of Pernambuco
More information about the Haskell-Cafe
mailing list