deriving over renamed types

Ashley Yakeley
Mon, 8 Apr 2002 15:14:54 -0700

At 2002-04-08 12:45, Lennart Augustsson wrote:

>I just just wanted to say that I agree with almost everything Conor said.
>I find it a little odd that the extension to Haskell that allows explicit
>does not also allow you use explicit type application (and type lanbda).

What did you have in mind?

  data Zero;
  data Succ n;

  type Add Zero b = b;
  type Add (Succ a) b = Succ (Add a b);

  type Mult Zero b = Zero;
  type Mult (Succ a) b = Add b (Mult a b);

  type Fact Zero = Zero;
  type Fact (Succ n) = Mult (Succ n) (Fact n);

  data Foo f = MkFoo (f ());

  type Succ' = Succ;
  type Succ'' n = Succ n;

  -- which of these types are the same?
  f1 = MkFoo undefined :: Foo Succ;
  f2 = MkFoo undefined :: Foo Succ';
  f3 = MkFoo undefined :: Foo Succ'';
  f4 = MkFoo undefined :: (Add (Succ Zero));

Ashley Yakeley, Seattle WA