@@ -115,10 +115,20 @@ data Environment = Environment {
115 } deriving (Show)
115 } deriving (Show)
118−-- An empty environment with no values and no types defined
118+-- The basic types existing in the external javascript environment
120+jsTypes ::M.Map (ModuleName, ProperName) (Kind, TypeDeclarationKind)
121+jsTypes = M.fromList [ ((ModuleName $ ProperName "Prim", ProperName "Function"), (FunKind Star $ FunKind Star Star, ExternData))
122+ , ((ModuleName $ ProperName "Prim", ProperName "Array"), (FunKind Star Star, ExternData))
123+ , ((ModuleName $ ProperName "Prim", ProperName "String"), (Star, ExternData))
124+ , ((ModuleName $ ProperName "Prim", ProperName "Number"), (Star, ExternData))
125+ , ((ModuleName $ ProperName "Prim", ProperName "Boolean"), (Star, ExternData)) ]
128+-- The initial environment with no values and only the default javascript types defined
120−emptyEnvironment :: Environment
130+initEnvironment :: Environment
121−emptyEnvironment = Environment M.empty M.empty M.empty M.empty []
131+initEnvironment = Environment M.empty jsTypes M.empty M.empty []
124-- Temporarily bind a collection of names to values
134-- Temporarily bind a collection of names to values
@@ -271,7 +281,7 @@ modifyEnv f = modify (\s -> s { checkEnv = f (checkEnv s) })
272runCheck :: Check a -> Either String (a, Environment)
282runCheck :: Check a -> Either String (a, Environment)
273runCheck c = do
283runCheck c = do
274− (a, s) <- flip runStateT (CheckState emptyEnvironment 0 0 Nothing) $ unCheck c
284+ (a, s) <- flip runStateT (CheckState initEnvironment 0 0 Nothing) $ unCheck c
275 return (a, checkEnv s)
285 return (a, checkEnv s)