remove spurious 'extern "C" {'
[haskell-directory.git] / Data / Set.hs
index 36c7ecd..0e3a5b8 100644 (file)
@@ -78,6 +78,8 @@ module Data.Set  (
             , deleteMax
             , deleteFindMin
             , deleteFindMax
+            , maxView
+            , minView
 
             -- * Conversion
 
@@ -756,6 +758,21 @@ deleteFindMax t
       Bin _ x l r   -> let (xm,r') = deleteFindMax r in (xm,balance x l r')
       Tip           -> (error "Set.deleteFindMax: can not return the maximal element of an empty set", Tip)
 
+-- | /O(log n)/. Retrieves the minimal key of the set, and the set stripped from that element
+-- @fail@s (in the monad) when passed an empty set.
+minView :: Monad m => Set a -> m (Set a, a)
+minView Tip = fail "Set.minView: empty set"
+minView x = return (swap $ deleteFindMin x)
+
+-- | /O(log n)/. Retrieves the maximal key of the set, and the set stripped from that element
+-- @fail@s (in the monad) when passed an empty set.
+maxView :: Monad m => Set a -> m (Set a, a)
+maxView Tip = fail "Set.maxView: empty set"
+maxView x = return (swap $ deleteFindMax x)
+
+swap (a,b) = (b,a)
+
+
 
 {--------------------------------------------------------------------
   [balance x l r] balances two trees with value x.