git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Create Prim module
a36f24fGary Burgess
purescript.cabal+1
@@ -64,6 +64,7 @@ library
64 Language.PureScript.Pretty.Kinds
64 Language.PureScript.Pretty.Kinds
65 Language.PureScript.Pretty.Types
65 Language.PureScript.Pretty.Types
66 Language.PureScript.Pretty.Values
66 Language.PureScript.Pretty.Values
67+ Language.PureScript.Prim
67 Language.PureScript.TypeChecker
68 Language.PureScript.TypeChecker
68 Language.PureScript.TypeChecker.Kinds
69 Language.PureScript.TypeChecker.Kinds
69 Language.PureScript.TypeChecker.Monad
70 Language.PureScript.TypeChecker.Monad
src/Language/PureScript/CodeGen/JS.hs+1
@@ -43,6 +43,7 @@ import Language.PureScript.CodeGen.JS.AST as AST
43import Language.PureScript.Types
43import Language.PureScript.Types
44import Language.PureScript.CodeGen.Optimize
44import Language.PureScript.CodeGen.Optimize
45import Language.PureScript.CodeGen.Common
45import Language.PureScript.CodeGen.Common
46+import Language.PureScript.Prim
46
47
47-- |
48-- |
48-- Generate code in the simplified Javascript intermediate representation for all declarations in a
49-- Generate code in the simplified Javascript intermediate representation for all declarations in a
src/Language/PureScript/CodeGen/Optimize.hs+1
@@ -47,6 +47,7 @@ import Language.PureScript.CodeGen.JS.AST
47import Language.PureScript.Options
47import Language.PureScript.Options
48import Language.PureScript.CodeGen.Common (identToJs)
48import Language.PureScript.CodeGen.Common (identToJs)
49import Language.PureScript.Types
49import Language.PureScript.Types
50+import Language.PureScript.Prim
50
51
51-- |
52-- |
52-- Apply a series of optimizer passes to simplified Javascript code
53-- Apply a series of optimizer passes to simplified Javascript code
src/Language/PureScript/Parser/Types.hs+5−2
@@ -19,13 +19,16 @@ module Language.PureScript.Parser.Types (
19 parseTypeAtom
19 parseTypeAtom
20) where
20) where
21
21
22+import Control.Applicative
23+import Control.Monad (when, unless)
24+
22import Language.PureScript.Types
25import Language.PureScript.Types
23import Language.PureScript.Parser.State
26import Language.PureScript.Parser.State
24import Language.PureScript.Parser.Common
27import Language.PureScript.Parser.Common
25−import Control.Applicative
28+import Language.PureScript.Prim
29+
26import qualified Text.Parsec as P
30import qualified Text.Parsec as P
27import qualified Text.Parsec.Expr as P
31import qualified Text.Parsec.Expr as P
28−import Control.Monad (when, unless)
29
32
30parseNumber :: P.Parsec String ParseState Type
33parseNumber :: P.Parsec String ParseState Type
31parseNumber = const tyNumber <$> reserved "Number"
34parseNumber = const tyNumber <$> reserved "Number"
src/Language/PureScript/Pretty/Types.hs+1
@@ -28,6 +28,7 @@ import Control.Monad.Unify
28
28
29import Language.PureScript.Types
29import Language.PureScript.Types
30import Language.PureScript.Pretty.Common
30import Language.PureScript.Pretty.Common
31+import Language.PureScript.Prim
31
32
32typeLiterals :: Pattern () Type String
33typeLiterals :: Pattern () Type String
33typeLiterals = mkPattern match
34typeLiterals = mkPattern match
src/Language/PureScript/Prim.hsnew file+69
@@ -0,0 +1,69 @@
1+-----------------------------------------------------------------------------
2+--
3+-- Module : Language.PureScript.Prim
4+-- Copyright : (c) 2013-14 Phil Freeman, (c) 2014 Gary Burgess, and other contributors
5+-- License : MIT
6+--
7+-- Maintainer : Phil Freeman <paf31@cantab.net>
8+-- Stability : experimental
9+-- Portability :
10+--
11+-- |
12+--
13+-----------------------------------------------------------------------------
14+
15+module Language.PureScript.Prim where
16+
17+import Language.PureScript.Kinds
18+import Language.PureScript.Names
19+import Language.PureScript.Types
20+
21+import qualified Data.Map as M
22+
23+-- |
24+-- Type constructor for functions
25+--
26+tyFunction :: Type
27+tyFunction = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "Function")
28+
29+-- |
30+-- Type constructor for strings
31+--
32+tyString :: Type
33+tyString = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "String")
34+
35+-- |
36+-- Type constructor for numbers
37+--
38+tyNumber :: Type
39+tyNumber = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "Number")
40+
41+-- |
42+-- Type constructor for booleans
43+--
44+tyBoolean :: Type
45+tyBoolean = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "Boolean")
46+
47+-- |
48+-- Type constructor for arrays
49+--
50+tyArray :: Type
51+tyArray = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "Array")
52+
53+-- |
54+-- Smart constructor for function types
55+--
56+function :: Type -> Type -> Type
57+function t1 = TypeApp (TypeApp tyFunction t1)
58+
59+-- |
60+-- The primitive types in the external javascript environment with their associated kinds.
61+--
62+primTypes :: M.Map (Qualified ProperName) Kind
63+primTypes = M.fromList [ (primName "Function" , FunKind Star (FunKind Star Star))
64+ , (primName "Array" , FunKind Star Star)
65+ , (primName "String" , Star)
66+ , (primName "Number" , Star)
67+ , (primName "Boolean" , Star) ]
68+ where
69+ primName name = Qualified (Just $ ModuleName [ProperName "Prim"]) (ProperName name)
src/Language/PureScript/Sugar/Names.hs+3−3
@@ -33,8 +33,7 @@ import Language.PureScript.Declarations
33import Language.PureScript.Names
33import Language.PureScript.Names
34import Language.PureScript.Types
34import Language.PureScript.Types
35import Language.PureScript.Values
35import Language.PureScript.Values
36−
37−import Language.PureScript.TypeChecker.Monad (jsTypes)
36+import Language.PureScript.Prim
38
37
39-- |
38-- |
40-- The global export environment - every declaration exported from every module.
39-- The global export environment - every declaration exported from every module.
@@ -226,7 +225,8 @@ findExports :: [Module] -> Either String ExportEnvironment
226findExports = foldM addModule $ M.singleton (ModuleName [ProperName "Prim"]) primExports
225findExports = foldM addModule $ M.singleton (ModuleName [ProperName "Prim"]) primExports
227 where
226 where
228
227
228+ -- The exported types from the Prim module
229− primExports = Exports (S.fromList $ (\(Qualified _ name) -> (name, [])) `map` (M.keys jsTypes)) S.empty S.empty
229+ primExports = Exports (S.fromList $ (\(Qualified _ name) -> (name, [])) `map` (M.keys primTypes)) S.empty S.empty
230
230
231 -- Add all of the exported declarations from a module to the global export environment
231 -- Add all of the exported declarations from a module to the global export environment
232 addModule :: ExportEnvironment -> Module -> Either String ExportEnvironment
232 addModule :: ExportEnvironment -> Module -> Either String ExportEnvironment
src/Language/PureScript/Sugar/TypeClasses.hs+1
@@ -25,6 +25,7 @@ import Language.PureScript.Types
25import Language.PureScript.Values
25import Language.PureScript.Values
26import Language.PureScript.CodeGen.JS.AST
26import Language.PureScript.CodeGen.JS.AST
27import Language.PureScript.Sugar.CaseDeclarations
27import Language.PureScript.Sugar.CaseDeclarations
28+import Language.PureScript.Prim
28
29
29import qualified Data.Map as M
30import qualified Data.Map as M
30
31
src/Language/PureScript/TypeChecker.hs+1
@@ -37,6 +37,7 @@ import Language.PureScript.Values
37import Language.PureScript.Kinds
37import Language.PureScript.Kinds
38import Language.PureScript.Declarations
38import Language.PureScript.Declarations
39import Language.PureScript.Sugar.TypeClasses
39import Language.PureScript.Sugar.TypeClasses
40+import Language.PureScript.Prim
40
41
41addDataType :: ModuleName -> ProperName -> [String] -> [(ProperName, [Type])] -> Kind -> Check ()
42addDataType :: ModuleName -> ProperName -> [String] -> [(ProperName, [Type])] -> Kind -> Check ()
42addDataType moduleName name args dctors ctorKind = do
43addDataType moduleName name args dctors ctorKind = do
src/Language/PureScript/TypeChecker/Monad.hs+2−11
@@ -23,6 +23,7 @@ import Language.PureScript.Kinds
23import Language.PureScript.Values
23import Language.PureScript.Values
24import Language.PureScript.Names
24import Language.PureScript.Names
25import Language.PureScript.Declarations
25import Language.PureScript.Declarations
26+import Language.PureScript.Prim
26
27
27import Data.Data
28import Data.Data
28import Data.Maybe
29import Data.Maybe
@@ -83,21 +84,11 @@ data Environment = Environment {
83 , typeClassDictionaries :: [TypeClassDictionaryInScope]
84 , typeClassDictionaries :: [TypeClassDictionaryInScope]
84 } deriving (Show)
85 } deriving (Show)
85
86
86−-- |
87−-- The basic types existing in the external javascript environment
88−--
89−jsTypes ::M.Map (Qualified ProperName) Kind
90−jsTypes = M.fromList [ (Qualified (Just $ ModuleName [ProperName "Prim"]) (ProperName "Function"), FunKind Star (FunKind Star Star))
91− , (Qualified (Just $ ModuleName [ProperName "Prim"]) (ProperName "Array"), FunKind Star Star)
92− , (Qualified (Just $ ModuleName [ProperName "Prim"]) (ProperName "String"), Star)
93− , (Qualified (Just $ ModuleName [ProperName "Prim"]) (ProperName "Number"), Star)
94− , (Qualified (Just $ ModuleName [ProperName "Prim"]) (ProperName "Boolean"), Star) ]
95−
96-- |
87-- |
97-- The initial environment with no values and only the default javascript types defined
88-- The initial environment with no values and only the default javascript types defined
98--
89--
99initEnvironment :: Environment
90initEnvironment :: Environment
100−initEnvironment = Environment M.empty jsTypes M.empty M.empty []
91+initEnvironment = Environment M.empty primTypes M.empty M.empty []
101
92
102-- |
93-- |
103-- Temporarily bind a collection of names to values
94-- Temporarily bind a collection of names to values
src/Language/PureScript/TypeChecker/Types.hs+1
@@ -56,6 +56,7 @@ import Language.PureScript.TypeChecker.Monad
56import Language.PureScript.TypeChecker.Kinds
56import Language.PureScript.TypeChecker.Kinds
57import Language.PureScript.TypeChecker.Synonyms
57import Language.PureScript.TypeChecker.Synonyms
58import Language.PureScript.Pretty
58import Language.PureScript.Pretty
59+import Language.PureScript.Prim
59
60
60import Control.Monad.State
61import Control.Monad.State
61import Control.Monad.Error
62import Control.Monad.Error
src/Language/PureScript/Types.hs−36
@@ -88,42 +88,6 @@ data Type
88 --
88 --
89 | PrettyPrintArray Type deriving (Show, Eq, Data, Typeable)
89 | PrettyPrintArray Type deriving (Show, Eq, Data, Typeable)
90
90
91−-- |
92−-- Type constructor for functions
93−--
94−tyFunction :: Type
95−tyFunction = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "Function")
96−
97−-- |
98−-- Type constructor for strings
99−--
100−tyString :: Type
101−tyString = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "String")
102−
103−-- |
104−-- Type constructor for numbers
105−--
106−tyNumber :: Type
107−tyNumber = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "Number")
108−
109−-- |
110−-- Type constructor for booleans
111−--
112−tyBoolean :: Type
113−tyBoolean = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "Boolean")
114−
115−-- |
116−-- Type constructor for arrays
117−--
118−tyArray :: Type
119−tyArray = TypeConstructor $ (Qualified $ Just $ ModuleName [ProperName "Prim"]) (ProperName "Array")
120−
121−-- |
122−-- Smart constructor for function types
123−--
124−function :: Type -> Type -> Type
125−function t1 = TypeApp (TypeApp tyFunction t1)
126−
127-- |
91-- |
128-- Convert a row to a list of pairs of labels and types
92-- Convert a row to a list of pairs of labels and types
129--
93--