Skip to content

Commit 4a04fe1

Browse files
committed
Module sorting using a module header getter
1 parent f6e2fc1 commit 4a04fe1

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

parse-package-set/Main.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ main = runAff_ (either throwException mempty) do
142142
let
143143
mods = Array.mapMaybe _.mbModule moduleResults
144144

145-
liftEffect case sortModules mods of
145+
liftEffect case sortModules identity mods of
146146
Sorted sorted -> Console.log $ Array.intercalate " "
147147
[ "Successfully sorted module graph for"
148148
, show (Array.length sorted)

src/PureScript/CST/ModuleGraph.purs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,31 @@ import PureScript.CST.Types (ImportDecl(..), ModuleHeader(..), ModuleName, Name(
2121

2222
type Graph a = Map a (Set a)
2323

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)
2626
where
2727
go (ModuleHeader { name: Name { name }, imports }) =
2828
Tuple name (Set.fromFoldable (map getImportName imports))
2929

3030
getImportName (ImportDecl { "module": Name { name } }) = name
3131

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)
3535

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
3838
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
4043
knownModuleHeaders =
4144
moduleHeaders
42-
# map (\header@(ModuleHeader { name: Name { name } }) -> Tuple name header)
45+
# map (\a -> Tuple (getModuleName (k a)) a)
4346
# Map.fromFoldable
4447

45-
graph = moduleGraph moduleHeaders
48+
graph = moduleGraph k moduleHeaders
4649
lookupModuleHeaders = Array.mapMaybe (flip Map.lookup knownModuleHeaders) <<< List.toUnfoldable
4750

4851
case topoSort graph of

0 commit comments

Comments
 (0)