git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Add desugarImports variant which produces an Env
2d5f547Harry Garrood
src/Language/PureScript/Sugar/Names.hs+19−3
@@ -1,8 +1,15 @@
1{-# LANGUAGE FlexibleContexts #-}
1{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE RecordWildCards #-}
2{-# LANGUAGE RecordWildCards #-}
3{-# LANGUAGE ScopedTypeVariables #-}
3{-# LANGUAGE ScopedTypeVariables #-}
4+{-# LANGUAGE TupleSections #-}
4
5
5−module Language.PureScript.Sugar.Names (desugarImports) where
6+module Language.PureScript.Sugar.Names
7+ ( desugarImports
8+ , desugarImportsWithEnv
9+ , Env
10+ , Imports(..)
11+ , Exports(..)
12+ ) where
6
13
7import Prelude ()
14import Prelude ()
8import Prelude.Compat
15import Prelude.Compat
@@ -35,11 +42,20 @@ import Language.PureScript.Linter.Imports
35-- modules should be topologically sorted beforehand.
42-- modules should be topologically sorted beforehand.
36--
43--
37desugarImports :: forall m. (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
44desugarImports :: forall m. (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
38−desugarImports externs modules = do
45+desugarImports externs modules =
46+ fmap snd (desugarImportsWithEnv externs modules)
47+
48+desugarImportsWithEnv
49+ :: forall m
50+ . (Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
51+ => [ExternsFile]
52+ -> [Module]
53+ -> m (Env, [Module])
54+desugarImportsWithEnv externs modules = do
39 env <- silence $ foldM externsEnv primEnv externs
55 env <- silence $ foldM externsEnv primEnv externs
40 modules' <- traverse updateExportRefs modules
56 modules' <- traverse updateExportRefs modules
41 (modules'', env') <- foldM updateEnv ([], env) modules'
57 (modules'', env') <- foldM updateEnv ([], env) modules'
42− traverse (renameInModule' env') modules''
58+ (env',) <$> traverse (renameInModule' env') modules''
43 where
59 where
44 silence :: m a -> m a
60 silence :: m a -> m a
45 silence = censor (const mempty)
61 silence = censor (const mempty)