@@ -19,6 +19,7 @@ module Language.PureScript.TypeChecker.Monad where
20import Language.PureScript.Types
20import Language.PureScript.Types
21import Language.PureScript.Kinds
21import Language.PureScript.Kinds
22+import Language.PureScript.Values
22import Language.PureScript.Names
23import Language.PureScript.Names
23import Language.PureScript.Unknown
24import Language.PureScript.Unknown
24import Language.PureScript.Declarations
25import Language.PureScript.Declarations
@@ -54,7 +55,7 @@ data Environment = Environment
54 , types :: M.Map (ModuleName, ProperName) (Kind, TypeDeclarationKind)
55 , types :: M.Map (ModuleName, ProperName) (Kind, TypeDeclarationKind)
55 , dataConstructors :: M.Map (ModuleName, ProperName) (Type, NameKind)
56 , dataConstructors :: M.Map (ModuleName, ProperName) (Type, NameKind)
56 , typeSynonyms :: M.Map (ModuleName, ProperName) ([String], Type)
57 , typeSynonyms :: M.Map (ModuleName, ProperName) ([String], Type)
57− , typeClassDictionaries :: [(Ident, [(Qualified ProperName, Type)], Qualified ProperName, Type)]
58+ , typeClassDictionaries :: [TypeClassDictionaryInScope]
58 } deriving (Show)
59 } deriving (Show)
60emptyEnvironment :: Environment
61emptyEnvironment :: Environment
@@ -76,7 +77,7 @@ bindTypes newNames action = do
76 modify $ \st -> st { checkEnv = (checkEnv st) { types = types . checkEnv $ orig } }
77 modify $ \st -> st { checkEnv = (checkEnv st) { types = types . checkEnv $ orig } }
79−withTypeClassDictionaries :: (MonadState CheckState m) => [(Ident, [(Qualified ProperName, Type)], Qualified ProperName, Type)] -> m a -> m a
80+withTypeClassDictionaries :: (MonadState CheckState m) => [TypeClassDictionaryInScope] -> m a -> m a
80withTypeClassDictionaries entries action = do
81withTypeClassDictionaries entries action = do
81 orig <- get
82 orig <- get
82 modify $ \st -> st { checkEnv = (checkEnv st) { typeClassDictionaries = entries ++ (typeClassDictionaries . checkEnv $ st) } }
83 modify $ \st -> st { checkEnv = (checkEnv st) { typeClassDictionaries = entries ++ (typeClassDictionaries . checkEnv $ st) } }
@@ -84,7 +85,7 @@ withTypeClassDictionaries entries action = do
84 modify $ \st -> st { checkEnv = (checkEnv st) { typeClassDictionaries = typeClassDictionaries . checkEnv $ orig } }
85 modify $ \st -> st { checkEnv = (checkEnv st) { typeClassDictionaries = typeClassDictionaries . checkEnv $ orig } }
87−getTypeClassDictionaries :: (Functor m, MonadState CheckState m) => m [(Ident, [(Qualified ProperName, Type)], Qualified ProperName, Type)]
88+getTypeClassDictionaries :: (Functor m, MonadState CheckState m) => m [TypeClassDictionaryInScope]
88getTypeClassDictionaries = typeClassDictionaries . checkEnv <$> get
89getTypeClassDictionaries = typeClassDictionaries . checkEnv <$> get
90bindLocalVariables :: (Functor m, MonadState CheckState m) => ModuleName -> [(Ident, Type)] -> m a -> m a
91bindLocalVariables :: (Functor m, MonadState CheckState m) => ModuleName -> [(Ident, Type)] -> m a -> m a