git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #834 from purescript/812

Fix #812

commitf52ad0234ac3d337a9dd27d4a272db0c1d67197d authorPhil Freeman <paf31@cantab.net> dateTue 3 Feb 2015, 08:34 (12 years ago) parent18f3004a131d5a
2 files changed+19−8
examples/passing/NewtypeWithRecordUpdate.purs+15 src/Language/PureScript/TypeChecker/Types.hs+4−8
examples/passing/NewtypeWithRecordUpdate.pursnew file+15
@@ -0,0 +1,15 @@
1+-- https://github.com/purescript/purescript/issues/812
2+
3+module Main where
4+
5+import Debug.Trace
6+
7+newtype NewType a = NewType (Object a)
8+
9+rec1 :: Object (a :: Number, b :: Number, c:: Number)
10+rec1 = { a: 0, b: 0, c: 0 }
11+
12+rec2 :: NewType (a :: Number, b :: Number, c :: Number)
13+rec2 = NewType (rec1 { a = 1 })
14+
15+main = trace "Done"
src/Language/PureScript/TypeChecker/Types.hs+4−8
@@ -582,18 +582,14 @@ containsTypeSynonyms = everythingOnTypes (||) go where
582582checkProperties :: [(String, Expr)] -> Type -> Bool -> UnifyT Type Check [(String, Expr)]
583583checkProperties ps row lax = let (ts, r') = rowToList row in go ps ts r' where
584584 go [] [] REmpty = return []
585− go [] [] u@(TUnknown _) = do u =?= REmpty
586− return []
585+ go [] [] u@(TUnknown _)
586+ | lax = return []
587+ | otherwise = do u =?= REmpty
588+ return []
587589 go [] [] Skolem{} | lax = return []
588590 go [] ((p, _): _) _ | lax = return []
589591 | otherwise = throwError $ mkErrorStack ("Object does not have property " ++ p) (Just (ExprError (ObjectLiteral ps)))
590592 go ((p,_):_) [] REmpty = throwError $ mkErrorStack ("Property " ++ p ++ " is not present in closed object type " ++ prettyPrintRow row) (Just (ExprError (ObjectLiteral ps)))
591− go ((p,v):ps') [] u@(TUnknown _) = do
592− v'@(TypedValue _ _ ty) <- infer v
593− rest <- fresh
594− u =?= RCons p ty rest
595− ps'' <- go ps' [] rest
596− return $ (p, v') : ps''
597593 go ((p,v):ps') ts r =
598594 case lookup p ts of
599595 Nothing -> do