@@ -118,6 +118,9 @@ unifyTypes t1 t2 = rethrow (\e -> "Error unifying type " ++ prettyPrintType t1 +
118 unifyTypes' r1 r2@RCons{} = unifyRows r1 r2
118 unifyTypes' r1 r2@RCons{} = unifyRows r1 r2
119 unifyTypes' r1@REmpty r2 = unifyRows r1 r2
119 unifyTypes' r1@REmpty r2 = unifyRows r1 r2
120 unifyTypes' r1 r2@REmpty = unifyRows r1 r2
120 unifyTypes' r1 r2@REmpty = unifyRows r1 r2
121+ unifyTypes' t@(ConstrainedType _ _) _ = throwError $ "Attempted to unify a constrained type " ++ prettyPrintType t ++
122+ " with another type."
123+ unifyTypes' t3 t4@(ConstrainedType _ _) = unifyTypes' t4 t3
121 unifyTypes' t3 t4 = throwError $ "Cannot unify " ++ prettyPrintType t3 ++ " with " ++ prettyPrintType t4 ++ "."
124 unifyTypes' t3 t4 = throwError $ "Cannot unify " ++ prettyPrintType t3 ++ " with " ++ prettyPrintType t4 ++ "."
@@ -321,7 +324,7 @@ escapeCheck value ty = do
321 let allUnknowns = findAllTypes value
324 let allUnknowns = findAllTypes value
322 forM_ allUnknowns $ \t -> do
325 forM_ allUnknowns $ \t -> do
323 let unsolvedUnknowns = nub . unknowns $ subst $? t
326 let unsolvedUnknowns = nub . unknowns $ subst $? t
324− guardWith "Escape check fails" $ null $ unsolvedUnknowns \\ visibleUnknowns
327+ guardWith "An unsolved type variable disappeared during type checking." $ null $ unsolvedUnknowns \\ visibleUnknowns
327-- Find all type annotations occuring inside a value
330-- Find all type annotations occuring inside a value