summaryrefslogtreecommitdiff
path: root/src/GF/Infra/Modules.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2006-02-24 15:49:14 +0000
committeraarne <aarne@cs.chalmers.se>2006-02-24 15:49:14 +0000
commit56a9e025d59d3c6df9f07a6304f7d1d56dfd96b2 (patch)
tree9523402074da8950bc54a1ee6bb2a5c9967a604d /src/GF/Infra/Modules.hs
parente8b4d1697dc9ac8834d66ed7533a5de992803292 (diff)
bronzeage README ; topological sorting of abstract modules
Diffstat (limited to 'src/GF/Infra/Modules.hs')
-rw-r--r--src/GF/Infra/Modules.hs9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/GF/Infra/Modules.hs b/src/GF/Infra/Modules.hs
index 723cf7f3d..e8f372896 100644
--- a/src/GF/Infra/Modules.hs
+++ b/src/GF/Infra/Modules.hs
@@ -368,15 +368,16 @@ isCompleteModule :: (Eq i) => Module i f a -> Bool
isCompleteModule m = mstatus m == MSComplete && mtype m /= MTInterface
--- | all abstract modules
+-- | all abstract modules sorted from least to most dependent
allAbstracts :: Eq i => MGrammar i f a -> [i]
-allAbstracts gr = [i | (i,ModMod m) <- modules gr, mtype m == MTAbstract]
+allAbstracts gr = topoSort
+ [(i,extends m) | (i,ModMod m) <- modules gr, mtype m == MTAbstract]
-- | the last abstract in dependency order (head of list)
greatestAbstract :: Eq i => MGrammar i f a -> Maybe i
greatestAbstract gr = case allAbstracts gr of
- [] -> Nothing
- a:_ -> return a
+ [] -> Nothing
+ as -> return $ last as
-- | all resource modules
allResources :: MGrammar i f a -> [i]