purescript 0.3.0 → 0.3.1
raw patch · 9 files changed
+23/−25 lines, 9 files
Files
- libraries/prelude/prelude.purs +3/−1
- purescript.cabal +1/−1
- src/Language/PureScript/CodeGen/JS.hs +1/−1
- src/Language/PureScript/Parser/Types.hs +5/−1
- src/Language/PureScript/Pretty/Types.hs +1/−1
- src/Language/PureScript/Sugar/TypeClasses.hs +1/−1
- src/Language/PureScript/TypeChecker/Kinds.hs +1/−4
- src/Language/PureScript/TypeChecker/Types.hs +9/−13
- src/Language/PureScript/Types.hs +1/−2
libraries/prelude/prelude.purs view
@@ -321,13 +321,15 @@ module Trace where + import Prelude import Eff foreign import data Trace :: ! foreign import trace "function trace(s) { return function() { console.log(s); return {}; }; }" :: forall r. String -> Eff (trace :: Trace | r) {} - foreign import print "function print(dict) { return function (o) { return function() { console.log(Prelude.show(dict)(o)); return {}; }; }; }" :: forall a r. (Prelude.Show a) => a -> Eff (trace :: Trace | r) {}+ print :: forall a r. (Prelude.Show a) => a -> Eff (trace :: Trace | r) {}+ print o = trace (show o) module ST where
purescript.cabal view
@@ -1,5 +1,5 @@ name: purescript-version: 0.3.0+version: 0.3.1 cabal-version: >=1.8 build-type: Simple license: MIT
src/Language/PureScript/CodeGen/JS.hs view
@@ -125,7 +125,7 @@ argumentCheck val Number = [typeCheck val "number"] argumentCheck val String = [typeCheck val "string"] argumentCheck val Boolean = [typeCheck val "boolean"]- argumentCheck val (Array _) = [arrayCheck val]+ argumentCheck val (TypeApp Array _) = [arrayCheck val] argumentCheck val (Object row) = let (pairs, _) = rowToList row
src/Language/PureScript/Parser/Types.hs view
@@ -36,8 +36,11 @@ parseBoolean = const Boolean <$> reserved "Boolean" parseArray :: P.Parsec String ParseState Type-parseArray = squares $ Array <$> parseType+parseArray = squares $ return Array +parseArrayOf :: P.Parsec String ParseState Type+parseArrayOf = squares $ TypeApp Array <$> parseType+ parseObject :: P.Parsec String ParseState Type parseObject = braces $ Object <$> parseRow @@ -64,6 +67,7 @@ , parseString , parseBoolean , parseArray+ , parseArrayOf , parseObject , parseFunction , parseTypeVariable
src/Language/PureScript/Pretty/Types.hs view
@@ -31,7 +31,7 @@ match Number = Just "Number" match String = Just "String" match Boolean = Just "Boolean"- match (Array ty) = Just $ "[" ++ prettyPrintType ty ++ "]"+ match Array = Just $ "[]" match (Object row) = Just $ "{ " ++ prettyPrintType row ++ " }" match (TypeVar var) = Just var match (TypeConstructor ctor) = Just $ show ctor
src/Language/PureScript/Sugar/TypeClasses.hs view
@@ -122,7 +122,7 @@ typeToString _ String = return "string" typeToString _ Number = return "number" typeToString _ Boolean = return "boolean"-typeToString _ (Array (TypeVar _)) = return "array"+typeToString _ Array = return "array" typeToString mn (TypeConstructor ty') = return $ qualifiedToString mn ty' typeToString mn (TypeApp ty' (TypeVar _)) = typeToString mn ty' typeToString _ _ = Left "Type class instance must be of the form T a1 ... an"
src/Language/PureScript/TypeChecker/Kinds.hs view
@@ -95,10 +95,7 @@ infer Number = return Star infer String = return Star infer Boolean = return Star-infer (Array t) = do- k <- infer t- k ~~ Star- return Star+infer Array = return $ FunKind Star Star infer (Object row) = do k <- infer row k ~~ Row Star
src/Language/PureScript/TypeChecker/Types.hs view
@@ -53,7 +53,6 @@ apply s (TUnknown u) = runSubstitution s u apply s (SaturatedTypeSynonym name tys) = SaturatedTypeSynonym name $ map (apply s) tys apply s (ForAll idents ty) = ForAll idents $ apply s ty- apply s (Array t) = Array (apply s t) apply s (Object r) = Object (apply s r) apply s (Function args ret) = Function (map (apply s) args) (apply s ret) apply s (TypeApp t1 t2) = TypeApp (apply s t1) (apply s t2)@@ -62,7 +61,6 @@ unknowns (TUnknown (Unknown u)) = [u] unknowns (SaturatedTypeSynonym _ tys) = concatMap unknowns tys unknowns (ForAll _ ty) = unknowns ty- unknowns (Array t) = unknowns t unknowns (Object r) = unknowns r unknowns (Function args ret) = concatMap unknowns args ++ unknowns ret unknowns (TypeApp t1 t2) = unknowns t1 ++ unknowns t2@@ -91,7 +89,7 @@ unifyTypes' Number Number = return () unifyTypes' String String = return () unifyTypes' Boolean Boolean = return ()- unifyTypes' (Array s) (Array t) = s `unifyTypes` t+ unifyTypes' Array Array = return () unifyTypes' (Object row1) (Object row2) = row1 ~~ row2 unifyTypes' (Function args1 ret1) (Function args2 ret2) = do guardWith "Function applied to incorrect number of args" $ length args1 == length args2@@ -218,9 +216,7 @@ typeHeadsAreEqual _ _ Number Number = Just [] typeHeadsAreEqual _ _ Boolean Boolean = Just [] typeHeadsAreEqual _ _ (Skolem s1) (Skolem s2) | s1 == s2 = Just []-typeHeadsAreEqual _ _ (Array (TypeVar v)) (Array ty) = Just [(v, ty)]-typeHeadsAreEqual _ _ (Array ty) (Array (TypeVar v)) = Just [(v, ty)]-typeHeadsAreEqual m e (Array ty1) (Array ty2) = typeHeadsAreEqual m e ty1 ty2+typeHeadsAreEqual _ _ Array Array = Just [] typeHeadsAreEqual m e (TypeConstructor c1) (TypeConstructor c2) | typeConstructorsAreEqual e m c1 c2 = Just [] typeHeadsAreEqual m e (TypeApp h1 (TypeVar v)) (TypeApp h2 arg) = (:) (v, arg) <$> typeHeadsAreEqual m e h1 h2 typeHeadsAreEqual m e t1@(TypeApp _ _) t2@(TypeApp _ (TypeVar _)) = typeHeadsAreEqual m e t2 t1@@ -312,7 +308,7 @@ infer' (ArrayLiteral vals) = do ts <- mapM infer vals els <- fresh- forM_ ts $ \(TypedValue _ _ t) -> els ~~ Array t+ forM_ ts $ \(TypedValue _ _ t) -> els ~~ TypeApp Array t return $ TypedValue True (ArrayLiteral ts) els infer' (Unary op val) = do v <- infer val@@ -338,8 +334,8 @@ infer' (Indexer index val) = do el <- fresh index' <- check index Number- val' <- check val (Array el)- return $ TypedValue True (Indexer (TypedValue True index' Number) (TypedValue True val' (Array el))) el+ val' <- check val (TypeApp Array el)+ return $ TypedValue True (Indexer (TypedValue True index' Number) (TypedValue True val' (TypeApp Array el))) el infer' (Accessor prop val) = do typed@(TypedValue _ _ objTy) <- infer val propTy <- inferProperty objTy prop@@ -533,13 +529,13 @@ inferBinder val (ArrayBinder binders) = do el <- fresh m1 <- M.unions <$> mapM (inferBinder el) binders- val ~~ Array el+ val ~~ TypeApp Array el return m1 inferBinder val (ConsBinder headBinder tailBinder) = do el <- fresh m1 <- inferBinder el headBinder m2 <- inferBinder val tailBinder- val ~~ Array el+ val ~~ TypeApp Array el return $ m1 `M.union` m2 inferBinder val (NamedBinder name binder) = do m <- inferBinder val binder@@ -668,10 +664,10 @@ check' v@(BooleanLiteral _) Boolean = return v check' (Unary op val) ty = checkUnary op val ty check' (Binary op left right) ty = checkBinary op left right ty-check' (ArrayLiteral vals) (Array ty) = ArrayLiteral <$> forM vals (\val -> check val ty)+check' (ArrayLiteral vals) (TypeApp Array ty) = ArrayLiteral <$> forM vals (\val -> check val ty) check' (Indexer index vals) ty = do index' <- check index Number- vals' <- check vals (Array ty)+ vals' <- check vals (TypeApp Array ty) return $ Indexer index' vals' check' (Abs args ret) (Function argTys retTy) = do moduleName <- substCurrentModule <$> ask
src/Language/PureScript/Types.hs view
@@ -27,7 +27,7 @@ | Number | String | Boolean- | Array Type+ | Array | Object Type | Function [Type] Type | TypeVar String@@ -54,7 +54,6 @@ isMonoType ty = isPolyType ty isPolyType :: Type -> Bool-isPolyType (Array ty) = isMonoType ty isPolyType (Object ps) = all isPolyType (map snd . fst $ rowToList ps) isPolyType (Function args ret) = all isPolyType args && isPolyType ret isPolyType (TypeApp t1 t2) = isMonoType t1 && isMonoType t2