On Tue, Mar 17, 2009 at 6:14 AM, Wolfgang Jeltsch <g9ks157k@acme.softbase.org> wrote:
Am Dienstag, 17. März 2009 11:49 schrieb Yandex:
> data (a :=: a') whereI don’t think, Comm and Trans should go into the data type. They are not
> Refl :: a :=: a
> Comm :: (a :=: a') -> (a' :=: a)
> Trans :: (a :=: a') -> (a' :=: a'') -> (a :=: a'')
axioms but can be proven. Refl says that each type equals itself. Since GADTs
are closed, Martijn’s definition also says that two types can *only* be equal
if they are actually the same.
Here are the original definition and the proofs of comm and trans. Compiles
fine with GHC 6.10.1.
comm :: (a :=: a') -> (a' :=: a)
data (a :=: a') where
Refl :: a :=: a
comm Refl = Refl
trans Refl Refl = Refl
trans :: (a :=: a') -> (a' :=: a'') -> (a :=: a'')
Best wishes,
Wolfgang
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe