
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') where Refl :: a :=: a Comm :: (a :=: a') -> (a' :=: a) Trans :: (a :=: a') -> (a' :=: a'') -> (a :=: a'')
I don’t think, Comm and Trans should go into the data type. They are not 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.
data (a :=: a') where
Refl :: a :=: a
comm :: (a :=: a') -> (a' :=: a) comm Refl = Refl
trans :: (a :=: a') -> (a' :=: a'') -> (a :=: a'') trans Refl Refl = Refl
These two theorems should be in the package.
Best wishes, Wolfgang _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe