hw-balancedparens-0.4.1.3: src/HaskellWorks/Data/BalancedParens/Internal/RoseTree.hs
{-# LANGUAGE DeriveGeneric #-}
module HaskellWorks.Data.BalancedParens.Internal.RoseTree
( RoseTree(..)
, toBools
, toBools'
, size
, depth
) where
import GHC.Generics
newtype RoseTree = RoseTree
{ children :: [RoseTree]
} deriving (Eq, Show, Generic)
toBools :: RoseTree -> [Bool]
toBools rt = toBools' rt []
toBools' :: RoseTree -> [Bool] -> [Bool]
toBools' (RoseTree cs) = (True:) . foldr (.) id (fmap toBools' cs) . (False:)
size :: RoseTree -> Int
size (RoseTree cs) = 1 + sum (fmap size cs)
depth :: RoseTree -> Int
depth (RoseTree cs) = 1 + maximum (fmap depth cs)