The attached program, chr.hs, causes GHC to generate external Core that
results in a type error when compiled with -dcore-lint, but compiles normally
itself. That is:

$ ghc -fext-core -fno-code -fglasgow-exts chr.hs
$ ghc -dcore-lint chr.hcr
*** Core Lint Errors: in result of Simplifier phase 0, iteration 1 out of 4 ***

<No locn>: In the expression: GHC.Prim.leWord#
                                (GHC.Prim.int2Word# i#) 1114111
    Argument value doesn't match argument type:
    Fun type: GHC.Prim.Word# -> GHC.Base.Bool
    Arg type: GHC.Prim.Int#

<error message trimmed>

Compilation had errors

$ ghc -fglasgow-exts chr.hs
$ 

The code for "mychr" is just "chr", from the Prelude. The typechecker seems
to think that 1114111 is an Int#, even though in the Core code, it's annotated
as being a Word#. (I'm using GHC 5.04.1 under RedHat Linux 7.3.)

-- 
Kirsten Chevalier * [EMAIL PROTECTED] * Often in error, never in doubt
import GHC.Exts

main = putStr (show (mychr 42))

{-# NOINLINE mychr #-}

mychr :: Int -> Char
mychr (I# i#) | int2Word# i# `leWord#` int2Word# 0x10FFFF# = C# (chr# i#)
            | otherwise                                  = error "Prelude.chr: bad 
argument"

Reply via email to