git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Add desugarImports variant which produces an Env

Add a variant of Language.PureScript.Sugar.Names.desugarImports which also returns the Env, built up during desugaring imports. We also export Env and related types (Imports, Exports), so that people can get useful information out of the the Env value in this new variant.

commit2d5f547e8ab2221d9f29431ed25c33f3c1bc4c81 authorHarry Garrood <harry@garrood.me> dateTue 29 Dec 2015, 08:03 (11 years ago) parent2d01b2b
1 file changed+19−3
src/Language/PureScript/Sugar/Names.hs+19−3
src/Language/PureScript/Sugar/Names.hs+19−3
@@ -1,8 +1,15 @@
11{-# LANGUAGE FlexibleContexts #-}
22{-# LANGUAGE RecordWildCards #-}
33{-# LANGUAGE ScopedTypeVariables #-}
4+{-# LANGUAGE TupleSections #-}
45
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
613
714import Prelude ()
815import Prelude.Compat
@@ -35,11 +42,20 @@ import Language.PureScript.Linter.Imports
3542-- modules should be topologically sorted beforehand.
3643--
3744desugarImports :: 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
3955 env <- silence $ foldM externsEnv primEnv externs
4056 modules' <- traverse updateExportRefs modules
4157 (modules'', env') <- foldM updateEnv ([], env) modules'
42− traverse (renameInModule' env') modules''
58+ (env',) <$> traverse (renameInModule' env') modules''
4359 where
4460 silence :: m a -> m a
4561 silence = censor (const mempty)