Am Mittwoch, 17. August 2005 10:52 schrieb Simon Peyton-Jones:
> >From the instance declaration
>
>       instance Fib Zero (Succ Zero)
> we get the improvement rule
>       Fib Zero a ==> a=(Succ Zero)
> We get a similar rule from
>       instance Fib (Succ Zero) (Succ Zero)
> But the instance declaration
>       instance (Fib n fib_n,
>                 Fib (Succ n) fib_s_n,
>                  Add fib_n fib_s_n sum
>                 ) => Fib (Succ (Succ n)) sum
>       Fib Zero a
> gives only
>       Fib Zero a ===> exists b. b=a
> which does nothing useful.

I suppose, you  mean
        Fib (Succ (Succ n)) a ==> exists b. a = b
here? Then I begin to understand...

> So when GHC sees the type signature, it's quite happy.  No improvement
> takes place.  If you compile Fib with -ddump-types you'll see it gets
> the type you specify.

So in this case, GHC doesn't use the instance CHR rule
        Fib (Succ (Succ n)) sum <=>
                Fib n fib_n, Fib (Succ n) fib_s_n, Add fib_n fib_s_n sum
arising from the context in the instance definition, does it? From my limited 
understanding, I would indeed assume that this is not necessary to ensure 
that the program is well typed.

> HOWEVER, when you say ":t eight", GHC does not simply report the type of
> "eight".  You can type an arbitrary expression there (e.g. ":t (reverse
> "hello")").  So GHC typechecks the expression "eight".  So it
> instantiates its type, and then tries to solve the constraint (Fib (Succ
> (Succ...)) n).  Now it must use the instance declarations to simplify
> it, and in doing so that exposes more constraints that do force n to be
> the type you get.

Ok, so now the simplification rule is used to ensure not only a well typed 
program, but to give the actual type of the expression "eight". Is this 
right?

> I agree this is desperately confusing,

I don't dare to disagree in this point ;-)

> programmers at all.   They are not a good way to express type-level
> computation.  Perhaps associated types might be a better way to express
> this stuff (see my home page).

At a first glance, this looks very interesting to me. Thanks for the pointer, 
I've put it onto my reading list!

Regards,
 Dirk
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to