From 8e69e941d69ed129b63d4ba9303fe929c20e3879 Mon Sep 17 00:00:00 2001 From: Spencer Janssen Date: Mon, 11 Jun 2007 18:51:54 +0200 Subject: Add StackSet.filter darcs-hash:20070611165154-a5988-8c46751ffd4bd03249656e3b467b8e7569c48b09 --- StackSet.hs | 17 +++++++++++++++-- tests/Properties.hs | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/StackSet.hs b/StackSet.hs index 619d536..1b258fc 100644 --- a/StackSet.hs +++ b/StackSet.hs @@ -76,12 +76,13 @@ module StackSet ( StackSet(..), Workspace(..), Screen(..), Stack(..), RationalRect(..), new, view, lookupWorkspace, peek, index, integrate, focusUp, focusDown, - focusWindow, member, findIndex, insertUp, delete, shift, + focusWindow, member, findIndex, insertUp, delete, shift, filter, swapMaster, swapUp, swapDown, modify, float, sink -- needed by users ) where +import Prelude hiding (filter) import Data.Maybe (listToMaybe) -import qualified Data.List as L (delete,find,genericSplitAt) +import qualified Data.List as L (delete,find,genericSplitAt,filter) import qualified Data.Map as M (Map,insert,delete,empty) -- | @@ -261,6 +262,18 @@ integrate :: Stack a -> [a] integrate Empty = [] integrate (Node x l r) = reverse l ++ x : r +-- | +-- /O(n)/. 'filter p s' returns the elements of 's' such that 'p' evaluates to +-- True. Order is preserved, and focus moves to the next node to the right (if +-- necessary). +filter :: (a -> Bool) -> Stack a -> Stack a +filter p Empty = Empty +filter p (Node f ls rs) = case L.filter p (f:rs) of + (f':rs') -> Node f' (L.filter p ls) rs' + [] -> case reverse $ L.filter p ls of + [] -> Empty + (f':rs') -> Node f' [] rs' + -- | -- /O(s)/. Extract the stack on the current workspace, as a list. -- The order of the stack is determined by the master window -- it will be diff --git a/tests/Properties.hs b/tests/Properties.hs index 8a2d712..06e32a5 100644 --- a/tests/Properties.hs +++ b/tests/Properties.hs @@ -1,6 +1,6 @@ {-# OPTIONS -fglasgow-exts #-} -import StackSet +import StackSet hiding (filter) import Operations (tile) import Debug.Trace -- cgit v1.2.3