@@ -21,6 +21,7 @@ module Language.PureScript.TypeChecker.Monad where
21import Language.PureScript.Types
21import Language.PureScript.Types
22import Language.PureScript.Kinds
22import Language.PureScript.Kinds
23import Language.PureScript.Names
23import Language.PureScript.Names
24+import Language.PureScript.Declarations (canonicalizeDictionary)
24import Language.PureScript.Environment
25import Language.PureScript.Environment
25import Language.PureScript.TypeClassDictionaries
26import Language.PureScript.TypeClassDictionaries
26import Language.PureScript.Options
27import Language.PureScript.Options
@@ -63,7 +64,8 @@ bindTypes newNames action = do
63withTypeClassDictionaries :: (MonadState CheckState m) => [TypeClassDictionaryInScope] -> m a -> m a
64withTypeClassDictionaries :: (MonadState CheckState m) => [TypeClassDictionaryInScope] -> m a -> m a
64withTypeClassDictionaries entries action = do
65withTypeClassDictionaries entries action = do
65 orig <- get
66 orig <- get
67+ let mentries = M.fromList [ ((canonicalizeDictionary entry, mn), entry) | entry@TypeClassDictionaryInScope{ tcdName = Qualified mn _ } <- entries ]
66− modify $ \st -> st { checkEnv = (checkEnv st) { typeClassDictionaries = entries ++ (typeClassDictionaries . checkEnv $ st) } }
68+ modify $ \st -> st { checkEnv = (checkEnv st) { typeClassDictionaries = (typeClassDictionaries . checkEnv $ st) `M.union` mentries } }
67 a <- action
69 a <- action
68 modify $ \st -> st { checkEnv = (checkEnv st) { typeClassDictionaries = typeClassDictionaries . checkEnv $ orig } }
70 modify $ \st -> st { checkEnv = (checkEnv st) { typeClassDictionaries = typeClassDictionaries . checkEnv $ orig } }
@@ -72,7 +74,7 @@ withTypeClassDictionaries entries action = do
72-- Get the currently available list of type class dictionaries
74-- Get the currently available list of type class dictionaries
74getTypeClassDictionaries :: (Functor m, MonadState CheckState m) => m [TypeClassDictionaryInScope]
76getTypeClassDictionaries :: (Functor m, MonadState CheckState m) => m [TypeClassDictionaryInScope]
75−getTypeClassDictionaries = typeClassDictionaries . checkEnv <$> get
77+getTypeClassDictionaries = M.elems . typeClassDictionaries . checkEnv <$> get
78-- Temporarily bind a collection of names to local variables
80-- Temporarily bind a collection of names to local variables