@@ -534,22 +534,22 @@ check' (IfThenElse cond th el) ty = do
534534 th' <- check th ty
535535 el' <- check el ty
536536 return $ TypedValue True (IfThenElse cond' th' el') ty
537- check' (ObjectLiteral ps) t@ (TypeApp obj row) | obj == tyObject = do
537+ check' e @ (ObjectLiteral ps) t@ (TypeApp obj row) | obj == tyObject = do
538538 ensureNoDuplicateProperties ps
539- ps' <- checkProperties ps row False
539+ ps' <- checkProperties e ps row False
540540 return $ TypedValue True (ObjectLiteral ps') t
541541check' (TypeClassDictionaryConstructorApp name ps) t = do
542542 ps' <- check' ps t
543543 return $ TypedValue True (TypeClassDictionaryConstructorApp name ps') t
544- check' (ObjectUpdate obj ps) t@ (TypeApp o row) | o == tyObject = do
544+ check' e @ (ObjectUpdate obj ps) t@ (TypeApp o row) | o == tyObject = do
545545 ensureNoDuplicateProperties ps
546546 -- We need to be careful to avoid duplicate labels here.
547- -- We check _obj_ agaist the type _t_ with the types in _ps_ replaced with unknowns.
547+ -- We check _obj_ against the type _t_ with the types in _ps_ replaced with unknowns.
548548 let (propsToCheck, rest) = rowToList row
549549 (removedProps, remainingProps) = partition (\ (p, _) -> p `elem` map fst ps) propsToCheck
550550 us <- zip (map fst removedProps) <$> replicateM (length ps) fresh
551551 obj' <- check obj (TypeApp tyObject (rowFromList (us ++ remainingProps, rest)))
552- ps' <- checkProperties ps row True
552+ ps' <- checkProperties e ps row True
553553 return $ TypedValue True (ObjectUpdate obj' ps') t
554554check' (Accessor prop val) ty = rethrow (addHint (ErrorCheckingAccessor val prop)) $ do
555555 rest <- fresh
@@ -586,17 +586,17 @@ check' val ty = do
586586--
587587-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
588588--
589- checkProperties :: [(String , Expr )] -> Type -> Bool -> UnifyT Type Check [(String , Expr )]
590- checkProperties ps row lax = let (ts, r') = rowToList row in go ps ts r' where
589+ checkProperties :: Expr -> [(String , Expr )] -> Type -> Bool -> UnifyT Type Check [(String , Expr )]
590+ checkProperties expr ps row lax = let (ts, r') = rowToList row in go ps ts r' where
591591 go [] [] REmpty = return []
592592 go [] [] u@ (TUnknown _)
593593 | lax = return []
594594 | otherwise = do u =?= REmpty
595595 return []
596596 go [] [] Skolem {} | lax = return []
597597 go [] ((p, _): _) _ | lax = return []
598- | otherwise = throwError . errorMessage $ PropertyIsMissing p row
599- go ((p,_): _) [] REmpty = throwError . errorMessage $ PropertyIsMissing p row
598+ | otherwise = throwError . errorMessage $ PropertyIsMissing p
599+ go ((p,_): _) [] REmpty = throwError . errorMessage $ AdditionalProperty p
600600 go ((p,v): ps') ts r =
601601 case lookup p ts of
602602 Nothing -> do
@@ -609,7 +609,7 @@ checkProperties ps row lax = let (ts, r') = rowToList row in go ps ts r' where
609609 v' <- check v ty
610610 ps'' <- go ps' (delete (p, ty) ts) r
611611 return $ (p, v') : ps''
612- go _ _ _ = throwError . errorMessage $ ExprDoesNotHaveType ( ObjectLiteral ps) (TypeApp tyObject row)
612+ go _ _ _ = throwError . errorMessage $ ExprDoesNotHaveType expr (TypeApp tyObject row)
613613
614614-- |
615615-- Check the type of a function application, rethrowing errors to provide a better error message
0 commit comments