@@ -51,12 +51,15 @@ emptyTypeSolution = TypeSolution (TUnknown, RUnknown)
52typeOf :: Ident -> Value -> Check PolyType
52typeOf :: Ident -> Value -> Check PolyType
53typeOf name val = do
53typeOf name val = do
54+ (cs, n) <- case val of
54− me <- fresh
56+ me <- fresh
55− (cs, n) <- typeConstraints (M.singleton name me) val
57+ (cs, n) <- typeConstraints (M.singleton name me) val
56− let allConstraints = TypeConstraint me (TUnknown n) : cs
58+ return (TypeConstraint me (TUnknown n) : cs, n)
59+ _ -> typeConstraints M.empty val
57− solution <- solveTypeConstraints allConstraints emptyTypeSolution
60+ solution <- solveTypeConstraints cs emptyTypeSolution
58 let ty = fst (runTypeSolution solution) n
61 let ty = fst (runTypeSolution solution) n
59− allUnknownsBecameQuantified allConstraints solution ty
62+ allUnknownsBecameQuantified cs solution ty
60 return $ varIfUnknown ty
63 return $ varIfUnknown ty
62allUnknownsBecameQuantified :: [TypeConstraint] -> TypeSolution -> Type -> Check ()
65allUnknownsBecameQuantified :: [TypeConstraint] -> TypeSolution -> Type -> Check ()