Added folding functions
authoriavor.diatchki <iavor.diatchki@gmail.com>
Mon, 25 Feb 2008 02:33:04 +0000 (18:33 -0800)
committeriavor.diatchki <iavor.diatchki@gmail.com>
Mon, 25 Feb 2008 02:33:04 +0000 (18:33 -0800)
darcs-hash:20080225023304-5035a-4f1460681d175ca6cc07e45bee013786456999af.gz

Data/ByteString/UTF8.hs

index c3a60dd..2712342 100644 (file)
@@ -9,12 +9,14 @@ module Data.ByteString.UTF8
   , span
   , break
   , fromString
+  , foldl
+  , foldr
   ) where
 
 import Data.Bits
 import Data.Word
 import qualified Data.ByteString as B
-import Prelude hiding (take,drop,splitAt,span,break)
+import Prelude hiding (take,drop,splitAt,span,break,foldr,foldl)
 
 import Codec.Binary.UTF8.String(encode)
 
@@ -97,3 +99,13 @@ break p bs = span (not . p) bs
 uncons :: B.ByteString -> Maybe (Char,B.ByteString)
 uncons bs = do (c,n) <- decode bs
                return (replacement_char c, drop n bs)
+
+foldr :: (Char -> a -> a) -> a -> B.ByteString -> a
+foldr cons nil cs = case uncons cs of
+                      Just (a,as) -> cons a (foldr cons nil as)
+                      Nothing     -> nil
+
+foldl :: (a -> Char -> a) -> a -> B.ByteString -> a
+foldl add acc cs  = case uncons cs of
+                      Just (a,as) -> foldl add (add acc a) as
+                      Nothing     -> acc