@@ -154,12 +154,12 @@ unifyRows r1 r2 =
154 unifyRows' :: [(String, Type)] -> Type -> [(String, Type)] -> Type -> UnifyT Type Check ()
154 unifyRows' :: [(String, Type)] -> Type -> [(String, Type)] -> Type -> UnifyT Type Check ()
155 unifyRows' [] (TUnknown u) sd r = u =:= rowFromList (sd, r)
155 unifyRows' [] (TUnknown u) sd r = u =:= rowFromList (sd, r)
156 unifyRows' sd r [] (TUnknown u) = u =:= rowFromList (sd, r)
156 unifyRows' sd r [] (TUnknown u) = u =:= rowFromList (sd, r)
157− unifyRows' ((name, ty):row) r others u@(TUnknown un) = do
157+ unifyRows' sd1 (TUnknown u1) sd2 (TUnknown u2) = do
158− occursCheck un ty
158+ forM_ sd1 $ \(_, t) -> occursCheck u2 t
159− forM_ row $ \(_, t) -> occursCheck un t
159+ forM_ sd2 $ \(_, t) -> occursCheck u1 t
160− u' <- fresh
160+ rest <- fresh
161− u =?= RCons name ty u'
161+ u1 =:= rowFromList (sd2, rest)
162− unifyRows' row r others u'
162+ u2 =:= rowFromList (sd1, rest)
163 unifyRows' [] REmpty [] REmpty = return ()
163 unifyRows' [] REmpty [] REmpty = return ()
164 unifyRows' [] (TypeVar v1) [] (TypeVar v2) | v1 == v2 = return ()
164 unifyRows' [] (TypeVar v1) [] (TypeVar v2) | v1 == v2 = return ()
165 unifyRows' [] (Skolem _ s1 _) [] (Skolem _ s2 _) | s1 == s2 = return ()
165 unifyRows' [] (Skolem _ s1 _) [] (Skolem _ s2 _) | s1 == s2 = return ()