@@ -26,6 +26,7 @@ import Data.Generics (everywhere, everywhereM, everything, mkT, mkM, mkQ, extM,
2626import PureScript.Values
2727import PureScript.Types
2828import PureScript.Kinds
29+import PureScript.Names
2930import PureScript.TypeChecker.Monad
3031import PureScript.TypeChecker.Kinds
3132import PureScript.TypeChecker.Synonyms
@@ -48,7 +49,7 @@ newtype TypeSolution = TypeSolution { runTypeSolution :: (Int -> Type, Int -> Ro
4849emptyTypeSolution :: TypeSolution
4950emptyTypeSolution = TypeSolution (TUnknown, RUnknown)
5051
51−typeOf :: String -> Value -> Check PolyType
52+typeOf :: Ident -> Value -> Check PolyType
5253typeOf name val = do
5354 me <- fresh
5455 (cs, n) <- typeConstraints (M.singleton name me) val
@@ -136,7 +137,7 @@ occursCheck u = everything (||) $ flip extQ g $ mkQ False f
136137 g (RUnknown u') | u' == u = True
137138 g _ = False
138139
139−typeConstraints :: M.Map String Int -> Value -> Check ([TypeConstraint], Int)
140+typeConstraints :: M.Map Ident Int -> Value -> Check ([TypeConstraint], Int)
140141typeConstraints _ (NumericLiteral _) = do
141142 me <- fresh
142143 return ([TypeConstraint me Number], me)
@@ -196,7 +197,7 @@ typeConstraints m (Var var) =
196197 Nothing -> do
197198 env <- getEnv
198199 case M.lookup var (names env) of
199− Nothing -> throwError $ var ++ " is undefined"
200+ Nothing -> throwError $ show var ++ " is undefined"
200201 Just (PolyType idents ty, _) -> do
201202 me <- fresh
202203 replaced <- replaceVarsWithUnknowns idents ty
@@ -275,7 +276,7 @@ symBinOpConstraints ty left right result = asymBinOpConstraints ty ty left right
275276asymBinOpConstraints :: Type -> Type -> Int -> Int -> Int -> [TypeConstraint]
276277asymBinOpConstraints ty res left right result = [TypeConstraint left ty, TypeConstraint right ty, TypeConstraint result res]
277278
278−typeConstraintsForBinder :: Int -> Binder -> Check ([TypeConstraint], M.Map String Int)
279+typeConstraintsForBinder :: Int -> Binder -> Check ([TypeConstraint], M.Map Ident Int)
279280typeConstraintsForBinder val (StringBinder _) = constantBinder val String
280281typeConstraintsForBinder val (NumberBinder _) = constantBinder val Number
281282typeConstraintsForBinder val (BooleanBinder _) = constantBinder val Boolean
@@ -305,7 +306,7 @@ typeConstraintsForBinder val (ObjectBinder props) = do
305306 (cs, m1) <- typeConstraintsForProperties row (RUnknown rest) props
306307 return ((TypeConstraint val (Object (RUnknown row))) : cs, m1)
307308 where
308− typeConstraintsForProperties :: Int -> Row -> [(String, Binder)] -> Check ([TypeConstraint], M.Map String Int)
309+ typeConstraintsForProperties :: Int -> Row -> [(String, Binder)] -> Check ([TypeConstraint], M.Map Ident Int)
309310 typeConstraintsForProperties nrow row [] = return ([RowConstraint nrow row], M.empty)
310311 typeConstraintsForProperties nrow row ((name, binder):binders) = do
311312 propTy <- fresh
@@ -323,10 +324,10 @@ typeConstraintsForBinder val (ArrayBinder binders rest) = do
323324 (cs2, m2) <- typeConstraintsForBinder val binder
324325 return (arrayConstraint : cs1 ++ cs2, M.union m1 m2)
325326
326−constantBinder :: Int -> Type -> Check ([TypeConstraint], M.Map String Int)
327+constantBinder :: Int -> Type -> Check ([TypeConstraint], M.Map Ident Int)
327328constantBinder val ty = return ([TypeConstraint val ty], M.empty)
328329
329−typeConstraintsForBinders :: M.Map String Int -> Int -> Int -> [(Binder, Value)] -> Check [TypeConstraint]
330+typeConstraintsForBinders :: M.Map Ident Int -> Int -> Int -> [(Binder, Value)] -> Check [TypeConstraint]
330331typeConstraintsForBinders _ _ _ [] = return []
331332typeConstraintsForBinders m nval ret ((binder, val):bs) = do
332333 (cs1, m1) <- typeConstraintsForBinder nval binder
@@ -334,13 +335,13 @@ typeConstraintsForBinders m nval ret ((binder, val):bs) = do
334335 cs3 <- typeConstraintsForBinders m nval ret bs
335336 return ((TypeConstraint n2 (TUnknown ret)) : cs1 ++ cs2 ++ cs3)
336337
337−typeConstraintsForStatement :: M.Map String Int -> M.Map String Int -> Int -> Statement -> Check ([TypeConstraint], Bool, M.Map String Int)
338+typeConstraintsForStatement :: M.Map Ident Int -> M.Map Ident Int -> Int -> Statement -> Check ([TypeConstraint], Bool, M.Map Ident Int)
338339typeConstraintsForStatement m mass ret (VariableIntroduction name val) = do
339340 case M.lookup name (m `M.union` mass) of
340341 Nothing -> do
341342 (cs1, n1) <- typeConstraints m val
342343 return $ (cs1, False, M.insert name n1 mass)
343− Just ty -> throwError $ "Variable with name " ++ name ++ " already exists."
344+ Just ty -> throwError $ "Variable with name " ++ show name ++ " already exists."
344345typeConstraintsForStatement m mass ret (Assignment tgt val) = do
345346 (cs1, n1) <- typeConstraints m val
346347 cs2 <- typeConstraintsForAssignmentTarget m mass n1 tgt
@@ -370,10 +371,10 @@ typeConstraintsForStatement m mass ret (Return val) = do
370371 (cs1, n1) <- typeConstraints (m `M.union` mass) val
371372 return ((TypeConstraint n1 (TUnknown ret)) : cs1, True, mass)
372373
373−typeConstraintsForAssignmentTarget :: M.Map String Int -> M.Map String Int -> Int -> AssignmentTarget -> Check [TypeConstraint]
374+typeConstraintsForAssignmentTarget :: M.Map Ident Int -> M.Map Ident Int -> Int -> AssignmentTarget -> Check [TypeConstraint]
374375typeConstraintsForAssignmentTarget m mass nval (AssignVariable var) =
375376 case M.lookup var mass of
376− Nothing -> throwError $ "No local variable with name " ++ var
377+ Nothing -> throwError $ "No local variable with name " ++ show var
377378 Just ty -> do
378379 return [TypeConstraint nval (TUnknown ty)]
379380typeConstraintsForAssignmentTarget m mass nval (AssignArrayIndex index tgt) = do
@@ -387,7 +388,7 @@ typeConstraintsForAssignmentTarget m mass nval (AssignObjectProperty prop tgt) =
387388 cs <- typeConstraintsForAssignmentTarget m mass obj tgt
388389 return $ (TypeConstraint obj (Object (RCons prop (TUnknown nval) $ RUnknown row))) : cs
389390
390−typeConstraintsForBlock :: M.Map String Int -> M.Map String Int -> Int -> [Statement] -> Check ([TypeConstraint], Bool, M.Map String Int)
391+typeConstraintsForBlock :: M.Map Ident Int -> M.Map Ident Int -> Int -> [Statement] -> Check ([TypeConstraint], Bool, M.Map Ident Int)
391392typeConstraintsForBlock _ mass _ [] = return ([], False, mass)
392393typeConstraintsForBlock m mass ret (s:ss) = do
393394 (cs1, b1, mass1) <- typeConstraintsForStatement (m `M.union` mass) mass ret s