/
ProcessModule.purs
36 lines (30 loc) · 1.33 KB
/
ProcessModule.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module Language.PS.SmartCST.ProcessModule where
import Data.Tuple.Nested ((/\))
import Language.PS.CST.Types.Leafs (ModuleName)
import Language.PS.CST.Types.Module (Export, ImportDecl(..))
import Prelude
import Data.Array as Array
import Language.PS.SmartCST.Types.Declaration as SmartCST.Declaration
import Language.PS.SmartCST.ProcessSmartDeclaration as Language.PS.SmartCST.ProcessSmartDeclaration
import Dodo (Doc)
import Language.PS.CST.Printers as Language.PS.CST.Printers
import Language.PS.CST.Types.Module as Language.PS.CST.Types.Module
newtype Module = Module
{ moduleName :: ModuleName
, exports :: Array Export
, declarations :: Array SmartCST.Declaration.Declaration
}
moduleToCstModule :: Module -> Language.PS.CST.Types.Module.Module
moduleToCstModule (Module module_) =
let
(declarations /\ imports) = Language.PS.SmartCST.ProcessSmartDeclaration.processDeclarations module_.moduleName module_.declarations
importsWithoutCurrentModule = Array.filter (\(ImportDecl importDecl) -> importDecl.moduleName /= module_.moduleName) imports
in
Language.PS.CST.Types.Module.Module
{ moduleName: module_.moduleName
, imports: importsWithoutCurrentModule
, exports: module_.exports
, declarations
}
printModule :: Module -> Doc Void
printModule = Language.PS.CST.Printers.printModule <<< moduleToCstModule