@@ -69,28 +69,7 @@ instance FreeVars a => FreeVars (Context a) where
69instance FreeVars a => FreeVars [a] where
69instance FreeVars a => FreeVars [a] where
70 freeVars = concatMap freeVars
70 freeVars = concatMap freeVars
72−class Occurs a where
72+occurs x t = x `elem` freeVars t
73− occurs :: X -> a -> Bool
75−instance Occurs Type where
76− occurs v (VarT x) = v == x
77− occurs v (LambdaT t1 t2) = occurs v t1 || occurs v t2
78− occurs v (ADT _ ts) = any (occurs v) ts
79− occurs v (RecordT fs t) = occurs v (concat $ Map.elems fs) || occurs v t
80− occurs v EmptyRecord = False
81− occurs v (Super _ ) = False
83−instance Occurs Constraint where
84− occurs x (t1 :=: t2) = occurs x t1 || occurs x t2
85− occurs x (t1 :<: t2) = occurs x t1 || occurs x t2
86− occurs x (y :<<: Forall xs cs t) = x == y || occurs x t || inCs
87− where inCs = x `notElem` xs && any (occurs x) cs
89−instance Occurs a => Occurs (Context a) where
90− occurs x (C _ _ c) = occurs x c
92−instance Occurs a => Occurs [a] where
93− occurs v = any (occurs v)
95concretize :: Scheme -> GuidCounter (Type, [Context Constraint])
74concretize :: Scheme -> GuidCounter (Type, [Context Constraint])
96concretize (Forall xs cs t) = do
75concretize (Forall xs cs t) = do