Skip to content

Commit

Permalink
Fix #812
Browse files Browse the repository at this point in the history
  • Loading branch information
paf31 committed Feb 3, 2015
1 parent 5061808 commit a131d5a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
15 changes: 15 additions & 0 deletions examples/passing/NewtypeWithRecordUpdate.purs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
-- https://github.com/purescript/purescript/issues/812

module Main where

import Debug.Trace

newtype NewType a = NewType (Object a)

rec1 :: Object (a :: Number, b :: Number, c:: Number)
rec1 = { a: 0, b: 0, c: 0 }

rec2 :: NewType (a :: Number, b :: Number, c :: Number)
rec2 = NewType (rec1 { a = 1 })

main = trace "Done"
12 changes: 4 additions & 8 deletions src/Language/PureScript/TypeChecker/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -581,18 +581,14 @@ containsTypeSynonyms = everythingOnTypes (||) go where
checkProperties :: [(String, Expr)] -> Type -> Bool -> UnifyT Type Check [(String, Expr)]
checkProperties ps row lax = let (ts, r') = rowToList row in go ps ts r' where
go [] [] REmpty = return []
go [] [] u@(TUnknown _) = do u =?= REmpty
return []
go [] [] u@(TUnknown _)
| lax = return []
| otherwise = do u =?= REmpty
return []
go [] [] Skolem{} | lax = return []
go [] ((p, _): _) _ | lax = return []
| otherwise = throwError $ mkErrorStack ("Object does not have property " ++ p) (Just (ExprError (ObjectLiteral ps)))
go ((p,_):_) [] REmpty = throwError $ mkErrorStack ("Property " ++ p ++ " is not present in closed object type " ++ prettyPrintRow row) (Just (ExprError (ObjectLiteral ps)))
go ((p,v):ps') [] u@(TUnknown _) = do
v'@(TypedValue _ _ ty) <- infer v
rest <- fresh
u =?= RCons p ty rest
ps'' <- go ps' [] rest
return $ (p, v') : ps''
go ((p,v):ps') ts r =
case lookup p ts of
Nothing -> do
Expand Down

0 comments on commit a131d5a

Please sign in to comment.