Compiling GHC disabling the type checker
Simon Marlow
simonmarhaskell at gmail.com
Mon Oct 16 08:27:27 EDT 2006
Neil Mitchell wrote:
> I would like to write a translator which takes a Haskell-like language
> to GHC compilable Haskell. This Haskell-like language is not
> explicitly typed, and cannot have types inferred for it (rank 2 types
> may exist etc), however it is known that the program will not crash
> with a type error. All case statements are well typed, i.e. case x of
> {1 -> ..; True -> ...} will not happen, although types cannot be given
> to the whole program.
>
> How does GHC react to a really large number of unsafeCoerce's? Is this
> likely to destroy performance? Has anything like this been done
> before? I know that LML was able to "turn off" the type checker, but I
> guess GHC doesn't have such an option, because of its typed Core
> language.
There's one restriction that I know of: you should be careful not to cast a
function value to a non-function type (except a polymorphic type), because the
two have incompatible representations when it comes to seq and case. And of
course, you should never cast an unboxed value to a boxed type or vice versa.
Apart from these, I think you should be fine to unsafeCoerce# away.
Cheers,
Simon
More information about the Glasgow-haskell-users
mailing list