purescript 0.1.11 → 0.1.12
raw patch · 3 files changed
+12/−13 lines, 3 files
Files
- purescript.cabal +1/−1
- src/Language/PureScript/TypeChecker/Types.hs +11/−8
- src/Language/PureScript/Types.hs +0/−4
purescript.cabal view
@@ -1,5 +1,5 @@ name: purescript-version: 0.1.11+version: 0.1.12 cabal-version: >=1.8 build-type: Simple license: MIT
src/Language/PureScript/TypeChecker/Types.hs view
@@ -295,15 +295,14 @@ lift $ ensureNoDuplicateProperties ps ts <- mapM (infer m . snd) ps let fields = zipWith (\(name, _) t -> (name, t)) ps ts- return $ Object $ typesToRow fields+ return $ Object $ rowFromList (fields, REmpty) infer' m (ObjectUpdate o ps) = do lift $ ensureNoDuplicateProperties ps- obj <- infer m o row <- fresh- ts <- mapM (infer m . snd) ps- let tys = zipWith (\(name, _) t -> (name, t)) ps ts- obj ~~ Object (rowFromList (tys, row))- return obj+ newTys <- zipWith (\(name, _) t -> (name, t)) ps <$> mapM (infer m . snd) ps+ oldTys <- zip (map fst ps) <$> replicateM (length ps) fresh+ check m o $ Object $ rowFromList (oldTys, row)+ return $ Object $ rowFromList (newTys, row) infer' m (Indexer index val) = do el <- fresh check m index Number@@ -662,9 +661,13 @@ check' m (ObjectLiteral ps) (Object row) = do lift $ ensureNoDuplicateProperties ps checkProperties m ps row False-check' m (ObjectUpdate obj ps) objTy@(Object row) = do+check' m (ObjectUpdate obj ps) (Object row) = do lift $ ensureNoDuplicateProperties ps- check m obj objTy+ us <- zip (map fst ps) <$> replicateM (length ps) fresh+ let (propsToCheck, rest) = rowToList row+ propsToRemove = map fst ps+ remainingProps = filter (\(p, _) -> p `notElem` propsToRemove) propsToCheck+ check m obj (Object (rowFromList (us ++ remainingProps, rest))) checkProperties m ps row True check' m (Accessor prop val) ty = do rest <- fresh
src/Language/PureScript/Types.hs view
@@ -44,10 +44,6 @@ | RCons String Type Row | RSkolem Int deriving (Show, Eq, Data, Typeable) -typesToRow :: [(String, Type)] -> Row-typesToRow [] = REmpty-typesToRow ((name, ty):tys) = RCons name ty (typesToRow tys)- rowToList :: Row -> ([(String, Type)], Row) rowToList (RCons name ty row) = let (tys, rest) = rowToList row in ((name, ty):tys, rest)