summaryrefslogtreecommitdiff
path: root/src/Hakyll/Core/DirectedGraph/ObsoleteFilter.hs
diff options
context:
space:
mode:
authorJasper Van der Jeugt <jaspervdj@gmail.com>2010-12-23 14:31:45 +0100
committerJasper Van der Jeugt <jaspervdj@gmail.com>2010-12-23 14:31:45 +0100
commitad6712121ffc3e41f6bd2a9833267252315b6f65 (patch)
treea34e2bb9bf726aec69e5362d1d443ff62460b04e /src/Hakyll/Core/DirectedGraph/ObsoleteFilter.hs
parent9b63052148a140b8ad5fc04b996023d8b8e3796d (diff)
downloadhakyll-ad6712121ffc3e41f6bd2a9833267252315b6f65.tar.gz
Add directed graph modules
Diffstat (limited to 'src/Hakyll/Core/DirectedGraph/ObsoleteFilter.hs')
-rw-r--r--src/Hakyll/Core/DirectedGraph/ObsoleteFilter.hs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/Hakyll/Core/DirectedGraph/ObsoleteFilter.hs b/src/Hakyll/Core/DirectedGraph/ObsoleteFilter.hs
new file mode 100644
index 0000000..a3bc57a
--- /dev/null
+++ b/src/Hakyll/Core/DirectedGraph/ObsoleteFilter.hs
@@ -0,0 +1,25 @@
+-- | Module exporting a function that works as a filter on a dependency graph.
+-- Given a list of obsolete nodes, this filter will reduce the graph so it only
+-- contains obsolete nodes and nodes that depend (directly or indirectly) on
+-- obsolete nodes.
+--
+module Hakyll.Core.DirectedGraph.ObsoleteFilter
+ ( obsoleteFilter
+ ) where
+
+import qualified Data.Set as S
+
+import Hakyll.Core.DirectedGraph
+import qualified Hakyll.Core.DirectedGraph as DG
+
+-- | Given a list of obsolete items, filter the dependency graph so it only
+-- contains these items
+--
+obsoleteFilter :: Ord a
+ => [a] -- ^ List of obsolete items
+ -> DirectedGraph a -- ^ Dependency graph
+ -> DirectedGraph a -- ^ Resulting dependency graph
+obsoleteFilter obsolete graph =
+ let reversed = DG.reverse graph
+ allObsolete = S.unions $ map (flip reachableNodes reversed) obsolete
+ in DG.filter (`S.member` allObsolete) graph