packages feed

purescript 0.3.0 → 0.3.1

raw patch · 9 files changed

+23/−25 lines, 9 files

Files

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