Victor Nazarov asviraspossible at
Thu Aug 4 22:24:05 CEST 2011

On Fri, Aug 5, 2011 at 12:02 AM, Simon Peyton-Jones
<simonpj at> wrote:
> |  data LiteralDesugaring m =
> |    LiteralDesugaring
> |      { desugarInt :: MonadThings m => Integer -> m CoreExpr
> |      , desugarWord :: MonadThings m => Integer -> m CoreExpr
> ...
> I am not sure why you want to control the desugaring of literals.  Why literals?  And why is literals enough?

I'm not sure if literals are enough, but literals essentially as
dependencies on ghc-prim package:


is desugared to something like

    GHC.Num.fromInteger (GHC.Integer.SmallInteger (5# :: Int#))



is desugared to something like

    GHC.String.unpackCString ("Hello"# :: Addr#)

Fore backends other than
drop-in-replacement-for-current-native-code-ghc-backend we may want
an alternative desugarings. For example,
 * we may want to use some very simple Integer implementation. We can
use doubles instead of integers at first to get things rolling.
 * in javascript we better use other "unpacking" function for strings,
since Javascript strings doesn't have terminating NUL and have length

Victor Nazarov

More information about the Glasgow-haskell-users mailing list