-equalTy t1 t2 = eqTy [] [] t1 t2
- where eqTy e1 e2 (Tvar v1) (Tvar v2) =
- case (elemIndex v1 e1,elemIndex v2 e2) of
- (Just i1, Just i2) -> i1 == i2
- (Nothing, Nothing) -> v1 == v2
- _ -> False
- eqTy e1 e2 (Tcon c1) (Tcon c2) = c1 == c2
- eqTy e1 e2 (Tapp t1a t1b) (Tapp t2a t2b) =
- eqTy e1 e2 t1a t2a && eqTy e1 e2 t1b t2b
- eqTy e1 e2 (Tforall (tv1,tk1) t1) (Tforall (tv2,tk2) t2) =
- tk1 == tk2 && eqTy (tv1:e1) (tv2:e2) t1 t2
- eqTy _ _ _ _ = False
-
-instance Eq Ty where (==) = equalTy
-
-subKindOf :: Kind -> Kind -> Bool
-_ `subKindOf` Kopen = True
-k1 `subKindOf` k2 = k1 == k2 -- don't worry about higher kinds
-
-instance Ord Kind where (<=) = subKindOf
-
-primMname = "PrelGHC"