@@ -31,7 +31,6 @@ data LinkMode
3131
3232data UberModule = UberModule
3333 { uberModuleBindings ∷ [Grouping (QName , Exp )]
34- , uberModuleForeigns ∷ [(ModuleName , FilePath )]
3534 , uberModuleExports ∷ [(Name , Exp )]
3635 }
3736 deriving stock (Show , Eq )
@@ -41,15 +40,14 @@ data UberModule = UberModule
4140
4241makeUberModule ∷ LinkMode → [Module ] → UberModule
4342makeUberModule linkMode modules =
44- UberModule
45- { uberModuleBindings
46- , uberModuleForeigns
47- , uberModuleExports
48- }
43+ UberModule {uberModuleBindings, uberModuleExports}
4944 where
5045 sortedModules = topoSorted modules
51- uberModuleBindings = concatMap qualifiedModuleBindings sortedModules
52- uberModuleForeigns = concatMap qualifiedModuleForeigns sortedModules
46+
47+ uberModuleBindings =
48+ concatMap foreignBindings sortedModules
49+ <> concatMap qualifiedModuleBindings sortedModules
50+
5351 uberModuleExports ∷ [(Name , Exp )] =
5452 case linkMode of
5553 LinkAsApplication moduleName name →
@@ -61,30 +59,41 @@ makeUberModule linkMode modules =
6159 , exportedName ← moduleExports
6260 ]
6361
64- qualifiedModuleBindings ∷ Module → [Grouping (QName , Exp )]
65- qualifiedModuleBindings Module {moduleName, moduleBindings, moduleForeigns} =
66- foreignBindings <> flip fmap moduleBindings \ case
67- Standalone binding → Standalone $ qualifyBinding binding
68- RecursiveGroup bindings → RecursiveGroup $ qualifyBinding <$> bindings
62+ foreignBindings ∷ Module → [Grouping (QName , Exp )]
63+ foreignBindings Module {moduleName, modulePath, moduleForeigns} =
64+ foreignModuleBinding <> foreignNamesBindings
6965 where
70- foreignModule = refImported moduleName (Name " foreign" ) 0
71- foreignBindings ∷ [Grouping (QName , Exp )] =
66+ foreignName = Name " foreign"
67+ foreignModuleRef = refImported moduleName foreignName 0
68+
69+ foreignModuleBinding ∷ [Grouping (QName , Exp )]
70+ foreignModuleBinding =
71+ [ Standalone
72+ ( QName moduleName foreignName
73+ , ForeignImport moduleName modulePath
74+ )
75+ | not (null moduleForeigns)
76+ ]
77+
78+ foreignNamesBindings ∷ [Grouping (QName , Exp )] =
7279 moduleForeigns <&> \ name →
7380 Standalone
7481 ( QName moduleName name
75- , objectProp foreignModule (PropName (nameToText name))
82+ , objectProp foreignModuleRef (PropName (nameToText name))
7683 )
7784
85+ qualifiedModuleBindings ∷ Module → [Grouping (QName , Exp )]
86+ qualifiedModuleBindings Module {moduleName, moduleBindings, moduleForeigns} =
87+ moduleBindings <&> \ case
88+ Standalone binding → Standalone $ qualifyBinding binding
89+ RecursiveGroup bindings → RecursiveGroup $ qualifyBinding <$> bindings
90+ where
7891 qualifyBinding ∷ (Name , Exp ) → (QName , Exp )
7992 qualifyBinding = bimap (QName moduleName) (qualifyTopRefs moduleName topRefs)
8093 where
8194 topRefs ∷ Map Name Index = Map. fromList do
8295 (,0 ) <$> ((moduleBindings >>= bindingNames) <> moduleForeigns)
8396
84- qualifiedModuleForeigns ∷ Module → [(ModuleName , FilePath )]
85- qualifiedModuleForeigns Module {moduleName, modulePath, moduleForeigns} =
86- [(moduleName, modulePath) | not (null moduleForeigns)]
87-
8897qualifyTopRefs ∷ ModuleName → Map Name Index → Exp → Exp
8998qualifyTopRefs moduleName = go
9099 where
0 commit comments