module ByteString.TreeBuilder.Tree where
import ByteString.TreeBuilder.Prelude hiding (foldl, foldr, foldlM, length)
import qualified Data.ByteString as B
import qualified Data.ByteString.Internal as C
import qualified Data.ByteString.Lazy.Internal as E
import qualified ByteString.TreeBuilder.Prelude as F
import qualified Data.ByteString.Internal as G
import qualified Foreign as H
data Tree =
Empty |
Leaf !ByteString |
Branch !Tree !Tree
foldl :: (a -> ByteString -> a) -> a -> Tree -> a
foldl step init =
\case
Empty ->
init
Leaf value ->
step init value
Branch tree1 tree2 ->
foldl step (foldl step init tree1) tree2
foldr :: (ByteString -> a -> a) -> a -> Tree -> a
foldr step init =
\case
Empty ->
init
Leaf value ->
step value init
Branch tree1 tree2 ->
foldr step (foldr step init tree2) tree1
foldlM :: Monad m => (a -> ByteString -> m a) -> a -> Tree -> m a
foldlM step init =
\case
Empty ->
return init
Leaf value ->
step init value
Branch tree1 tree2 ->
foldlM step init tree1 >>= \init2 -> foldlM step init2 tree2