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"