From 921f8f768880a2c3816209d96aa55db950317f93 Mon Sep 17 00:00:00 2001 From: Dominic Orchard Date: Mon, 2 Sep 2024 16:36:26 +0100 Subject: [PATCH] remove duplicates after processing to a list --- src/Language/Fortran/Analysis/ModGraph.hs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Language/Fortran/Analysis/ModGraph.hs b/src/Language/Fortran/Analysis/ModGraph.hs index a3ef9d60..930e1538 100644 --- a/src/Language/Fortran/Analysis/ModGraph.hs +++ b/src/Language/Fortran/Analysis/ModGraph.hs @@ -97,7 +97,7 @@ genModGraph mversion includeDirs cppOpts paths = do pf <- parserF path contents mapM_ (perModule path) (childrenBi pf :: [ProgramUnit ()]) pure () - execStateT (mapM_ iter (removeDuplicates paths)) modGraph0 + execStateT (mapM_ iter paths) modGraph0 -- Remove duplicates from a list preserving the left most occurrence. removeDuplicates :: Eq a => [a] -> [a] @@ -122,12 +122,14 @@ modGraphToDOT ModGraph { mgGraph = gr } = unlines dot -- Provides a topological sort of the graph, giving a list of filenames modGraphToList :: ModGraph -> [String] -modGraphToList mg - | nxt <- takeNextMods mg - , not (null nxt) = - let mg' = delModNodes (map fst nxt) mg - in [ fn | (_, Just (MOFile fn)) <- nxt ] ++ modGraphToList mg' -modGraphToList _ = [] +modGraphToList m = removeDuplicates $ modGraphToList' m + where + modGraphToList' mg + | nxt <- takeNextMods mg + , not (null nxt) = + let mg' = delModNodes (map fst nxt) mg + in [ fn | (_, Just (MOFile fn)) <- nxt ] ++ modGraphToList' mg' + modGraphToList' _ = [] takeNextMods :: ModGraph -> [(Node, Maybe ModOrigin)]