replacing the Prelude (again)

Malcolm Wallace Malcolm.Wallace@cs.york.ac.uk
Mon, 15 Jul 2002 10:55:32 +0100


> | anymore. What I would like is that the defualting rules refer 
> | to the classes in my version of the Prelude, 
> | not the Standard Prelude.
> 
> You can always get that (with the -fno-implicit-prelude thing) by adding
> 	default [Int, Double]
> 
> or whatever to your source module, just after the import that gets your
> new standard Prelude.  Doesn't that do it?  

We came across the same problem in the Hat tracer (which is also a
source-to-source transformation, and can also be used for debugging).

The problem is that the transformation introduces new classes, so
    Prelude.Ord -> HatPrelude.Ord
    Prelude.Eq  -> HatPrelude.Eq
    Prelude.Num -> HatPrelude.Num

The defaulting mechanism *only* applies to types constrained by
the original builtin Prelude.Num, not to the transformed class
HatPrelude.Num.

I think you are saying that if we
    import HatPrelude as Prelude
together with -fno-implicit-prelude in GHC, then defaulting should work
over the HatPrelude classes rather than the Prelude ones?

Unfortunately, in Hat at least, we continue to use the original
Prelude in *addition* to the replacement HatPrelude.  So how would
defaulting work in the following?

    {-# -fno-implicit-prelude #-}
    import Prelude as Original
    import HatPrelude as Prelude
    default (Integer,Double)

Regards,
    Malcolm