@@ -21,28 +21,31 @@ import PureScript.CST.Types (ImportDecl(..), ModuleHeader(..), ModuleName, Name(
21
21
22
22
type Graph a = Map a (Set a )
23
23
24
- moduleGraph :: forall e . Array ( ModuleHeader e ) -> Graph ModuleName
25
- moduleGraph = Map .fromFoldable <<< map go
24
+ moduleGraph :: forall e a . ( a -> ModuleHeader e ) -> Array a -> Graph ModuleName
25
+ moduleGraph k = Map .fromFoldable <<< map (go <<< k)
26
26
where
27
27
go (ModuleHeader { name: Name { name }, imports }) =
28
28
Tuple name (Set .fromFoldable (map getImportName imports))
29
29
30
30
getImportName (ImportDecl { " module" : Name { name } }) = name
31
31
32
- data ModuleSort e
33
- = Sorted (Array ( ModuleHeader e ) )
34
- | CycleDetected (Array ( ModuleHeader e ) )
32
+ data ModuleSort a
33
+ = Sorted (Array a )
34
+ | CycleDetected (Array a )
35
35
36
- sortModules :: forall e . Array ( ModuleHeader e ) -> ModuleSort e
37
- sortModules moduleHeaders = do
36
+ sortModules :: forall e a . ( a -> ModuleHeader e ) -> Array a -> ModuleSort a
37
+ sortModules k moduleHeaders = do
38
38
let
39
- knownModuleHeaders :: Map ModuleName (ModuleHeader e )
39
+ getModuleName :: ModuleHeader e -> ModuleName
40
+ getModuleName (ModuleHeader { name: Name { name } }) = name
41
+
42
+ knownModuleHeaders :: Map ModuleName a
40
43
knownModuleHeaders =
41
44
moduleHeaders
42
- # map (\header@( ModuleHeader { name: Name { name } }) -> Tuple name header )
45
+ # map (\a -> Tuple (getModuleName (k a)) a )
43
46
# Map .fromFoldable
44
47
45
- graph = moduleGraph moduleHeaders
48
+ graph = moduleGraph k moduleHeaders
46
49
lookupModuleHeaders = Array .mapMaybe (flip Map .lookup knownModuleHeaders) <<< List .toUnfoldable
47
50
48
51
case topoSort graph of
0 commit comments