module Problems.MultiwayTrees (
MultiwayTree (MultiwayTree),
multitree1, multitree2, multitree3, multitree4, multitree5,
multitreeSize,
) where
import Control.DeepSeq
import GHC.Generics (Generic)
data MultiwayTree a = MultiwayTree a [MultiwayTree a]
deriving (MultiwayTree a -> MultiwayTree a -> Bool
forall a. Eq a => MultiwayTree a -> MultiwayTree a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MultiwayTree a -> MultiwayTree a -> Bool
$c/= :: forall a. Eq a => MultiwayTree a -> MultiwayTree a -> Bool
== :: MultiwayTree a -> MultiwayTree a -> Bool
$c== :: forall a. Eq a => MultiwayTree a -> MultiwayTree a -> Bool
Eq, Int -> MultiwayTree a -> ShowS
forall a. Show a => Int -> MultiwayTree a -> ShowS
forall a. Show a => [MultiwayTree a] -> ShowS
forall a. Show a => MultiwayTree a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MultiwayTree a] -> ShowS
$cshowList :: forall a. Show a => [MultiwayTree a] -> ShowS
show :: MultiwayTree a -> String
$cshow :: forall a. Show a => MultiwayTree a -> String
showsPrec :: Int -> MultiwayTree a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> MultiwayTree a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (MultiwayTree a) x -> MultiwayTree a
forall a x. MultiwayTree a -> Rep (MultiwayTree a) x
$cto :: forall a x. Rep (MultiwayTree a) x -> MultiwayTree a
$cfrom :: forall a x. MultiwayTree a -> Rep (MultiwayTree a) x
Generic, forall a. NFData a => MultiwayTree a -> ()
forall a. (a -> ()) -> NFData a
rnf :: MultiwayTree a -> ()
$crnf :: forall a. NFData a => MultiwayTree a -> ()
NFData)
multitree1 :: MultiwayTree Char
multitree1 :: MultiwayTree Char
multitree1 = forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'a' []
multitree2 :: MultiwayTree Char
multitree2 :: MultiwayTree Char
multitree2 = forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'a' [forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'b' []]
multitree3 :: MultiwayTree Char
multitree3 :: MultiwayTree Char
multitree3 = forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'a' [forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'b' [forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'c' []]]
multitree4 :: MultiwayTree Char
multitree4 :: MultiwayTree Char
multitree4 = forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'b' [forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'd' [], forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'e' []]
multitree5 :: MultiwayTree Char
multitree5 :: MultiwayTree Char
multitree5 = forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'a'
[ forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'f' [forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'g' []]
, forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'c' []
, forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'b' [forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'd' [], forall a. a -> [MultiwayTree a] -> MultiwayTree a
MultiwayTree Char
'e' []]
]
multitreeSize :: MultiwayTree a -> Int
multitreeSize :: forall a. MultiwayTree a -> Int
multitreeSize (MultiwayTree a
_ [MultiwayTree a]
ts) = Int
1 forall a. Num a => a -> a -> a
+ forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum (forall a b. (a -> b) -> [a] -> [b]
map forall a. MultiwayTree a -> Int
multitreeSize [MultiwayTree a]
ts)