module Tree234(treeMap, treeCombine, treeRebuild, treeFromList, treeMapList,
               treeList, treeUpdate, treeSearch, treeAdd, initTree234, Tree234) where

data Tree234 a = Leaf |
                 Leaf2 a |
                 Leaf3 a a |
                 Leaf4 a a a |
                 Node2 a (Tree234 a) (Tree234 a) |
                 Node3 a a (Tree234 a) (Tree234 a) (Tree234 a) |
                 Node4 a a a (Tree234 a) (Tree234 a) (Tree234 a) (Tree234 a) 
                 deriving (Tree234 a -> Tree234 a -> Bool
(Tree234 a -> Tree234 a -> Bool)
-> (Tree234 a -> Tree234 a -> Bool) -> Eq (Tree234 a)
forall a. Eq a => Tree234 a -> Tree234 a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Tree234 a -> Tree234 a -> Bool
$c/= :: forall a. Eq a => Tree234 a -> Tree234 a -> Bool
== :: Tree234 a -> Tree234 a -> Bool
$c== :: forall a. Eq a => Tree234 a -> Tree234 a -> Bool
Eq, Eq (Tree234 a)
Eq (Tree234 a)
-> (Tree234 a -> Tree234 a -> Ordering)
-> (Tree234 a -> Tree234 a -> Bool)
-> (Tree234 a -> Tree234 a -> Bool)
-> (Tree234 a -> Tree234 a -> Bool)
-> (Tree234 a -> Tree234 a -> Bool)
-> (Tree234 a -> Tree234 a -> Tree234 a)
-> (Tree234 a -> Tree234 a -> Tree234 a)
-> Ord (Tree234 a)
Tree234 a -> Tree234 a -> Bool
Tree234 a -> Tree234 a -> Ordering
Tree234 a -> Tree234 a -> Tree234 a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (Tree234 a)
forall a. Ord a => Tree234 a -> Tree234 a -> Bool
forall a. Ord a => Tree234 a -> Tree234 a -> Ordering
forall a. Ord a => Tree234 a -> Tree234 a -> Tree234 a
min :: Tree234 a -> Tree234 a -> Tree234 a
$cmin :: forall a. Ord a => Tree234 a -> Tree234 a -> Tree234 a
max :: Tree234 a -> Tree234 a -> Tree234 a
$cmax :: forall a. Ord a => Tree234 a -> Tree234 a -> Tree234 a
>= :: Tree234 a -> Tree234 a -> Bool
$c>= :: forall a. Ord a => Tree234 a -> Tree234 a -> Bool
> :: Tree234 a -> Tree234 a -> Bool
$c> :: forall a. Ord a => Tree234 a -> Tree234 a -> Bool
<= :: Tree234 a -> Tree234 a -> Bool
$c<= :: forall a. Ord a => Tree234 a -> Tree234 a -> Bool
< :: Tree234 a -> Tree234 a -> Bool
$c< :: forall a. Ord a => Tree234 a -> Tree234 a -> Bool
compare :: Tree234 a -> Tree234 a -> Ordering
$ccompare :: forall a. Ord a => Tree234 a -> Tree234 a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (Tree234 a)
Ord,Int -> Tree234 a -> ShowS
[Tree234 a] -> ShowS
Tree234 a -> String
(Int -> Tree234 a -> ShowS)
-> (Tree234 a -> String)
-> ([Tree234 a] -> ShowS)
-> Show (Tree234 a)
forall a. Show a => Int -> Tree234 a -> ShowS
forall a. Show a => [Tree234 a] -> ShowS
forall a. Show a => Tree234 a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Tree234 a] -> ShowS
$cshowList :: forall a. Show a => [Tree234 a] -> ShowS
show :: Tree234 a -> String
$cshow :: forall a. Show a => Tree234 a -> String
showsPrec :: Int -> Tree234 a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Tree234 a -> ShowS
Show)

initTree234 :: Tree234 a
initTree234 = Tree234 a
forall a. Tree234 a
Leaf

treeAdd :: (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> Tree234 a
-> Tree234 a
treeAdd a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a
t = (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
forall a.
(a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a -> Tree234 a
forall a. a -> a
id a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 Tree234 a
t

treeSearch :: t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
Leaf = t
fail
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p (Leaf2 t
a1) = t -> t -> t -> t -> t
p t
a1 t
fail (t -> t
cont t
a1) t
fail
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p (Leaf3 t
a1 t
a2) =
    t -> t -> t -> t -> t
p t
a1 t
fail (t -> t
cont t
a1) (t -> t -> t -> t -> t
p t
a2 t
fail (t -> t
cont t
a2) t
fail)
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p (Leaf4 t
a1 t
a2 t
a3) =
    t -> t -> t -> t -> t
p t
a2 (t -> t -> t -> t -> t
p t
a1 t
fail (t -> t
cont t
a1) t
fail) (t -> t
cont t
a2) (t -> t -> t -> t -> t
p t
a3 t
fail (t -> t
cont t
a3) t
fail)
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p (Node2 t
a1 Tree234 t
t1 Tree234 t
t2) =
    t -> t -> t -> t -> t
p t
a1 (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t1) (t -> t
cont t
a1) (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t2)
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p (Node3 t
a1 t
a2 Tree234 t
t1 Tree234 t
t2 Tree234 t
t3) =
    t -> t -> t -> t -> t
p t
a1
      (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t1)
      (t -> t
cont t
a1)
      (t -> t -> t -> t -> t
p t
a2
         (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t2)
         (t -> t
cont t
a2)
         (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t3))
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p (Node4 t
a1 t
a2 t
a3 Tree234 t
t1 Tree234 t
t2 Tree234 t
t3 Tree234 t
t4) =
    t -> t -> t -> t -> t
p t
a2
      (t -> t -> t -> t -> t
p t
a1
         (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t1)
         (t -> t
cont t
a1)
         (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t2))
      (t -> t
cont t
a2)
      (t -> t -> t -> t -> t
p t
a3
         (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t3)
         (t -> t
cont t
a3)
         (t -> (t -> t) -> (t -> t -> t -> t -> t) -> Tree234 t -> t
treeSearch t
fail t -> t
cont t -> t -> t -> t -> t
p Tree234 t
t4))

treeUpdateFailed :: a
treeUpdateFailed = String -> a
forall a. HasCallStack => String -> a
error String
"treeUpdate couldn't find the node"

treeUpdate :: (a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
Leaf = Tree234 a
forall a. Tree234 a
Leaf
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p (Leaf2 a
a1) =
    a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a1 Tree234 a
forall a. a
treeUpdateFailed (a -> Tree234 a
forall a. a -> Tree234 a
Leaf2 (a -> a
update a
a1)) Tree234 a
forall a. a
treeUpdateFailed
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p (Leaf3 a
a1 a
a2) =
    a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a1
      Tree234 a
forall a. a
treeUpdateFailed
      (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 (a -> a
update a
a1) a
a2)
      (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a2 Tree234 a
forall a. a
treeUpdateFailed (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 a
a1 (a -> a
update a
a2)) Tree234 a
forall a. a
treeUpdateFailed)
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p (Leaf4 a
a1 a
a2 a
a3) =
    a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a2
      (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a1 Tree234 a
forall a. a
treeUpdateFailed (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 (a -> a
update a
a1) a
a2 a
a3) Tree234 a
forall a. a
treeUpdateFailed)
      (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 a
a1 (a -> a
update a
a2) a
a3)
      (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a3 Tree234 a
forall a. a
treeUpdateFailed (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 a
a1 a
a2 (a -> a
update a
a3)) Tree234 a
forall a. a
treeUpdateFailed)
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p (Node2 a
a1 Tree234 a
t1 Tree234 a
t2) =
    a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a1
      (a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a1 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t1) Tree234 a
t2)
      (a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 (a -> a
update a
a1) Tree234 a
t1 Tree234 a
t2)
      (a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a1 Tree234 a
t1 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t2))
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p (Node3 a
a1 a
a2 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3) =
    a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a1
      (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 a
a2 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t1) Tree234 a
t2 Tree234 a
t3)
      (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 (a -> a
update a
a1) a
a2 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3)
      (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a2
         (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 a
a2 Tree234 a
t1 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t2) Tree234 a
t3)
         (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 (a -> a
update a
a2) Tree234 a
t1 Tree234 a
t2 Tree234 a
t3)
         (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 a
a2 Tree234 a
t1 Tree234 a
t2 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t3)))
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p (Node4 a
a1 a
a2 a
a3 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 Tree234 a
t4) =
    a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a2
      (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a1
         (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 a
a2 a
a3 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t1) Tree234 a
t2 Tree234 a
t3 Tree234 a
t4)
         (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 (a -> a
update a
a1) a
a2 a
a3 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 Tree234 a
t4)
         (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 a
a2 a
a3 Tree234 a
t1 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t2) Tree234 a
t3 Tree234 a
t4))
      (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 (a -> a
update a
a2) a
a3 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 Tree234 a
t4)
      (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p a
a3
         (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 a
a2 a
a3 Tree234 a
t1 Tree234 a
t2 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t3) Tree234 a
t4)
         (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 a
a2 (a -> a
update a
a3) Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 Tree234 a
t4)
         (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 a
a2 a
a3 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 ((a -> a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeUpdate a -> a
update a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
p Tree234 a
t4)))

treeMapList :: (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
Leaf = []
treeMapList t -> [a]
f (Leaf2 t
a1) = t -> [a]
f t
a1
treeMapList t -> [a]
f (Leaf3 t
a1 t
a2) = t -> [a]
f t
a1 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ t -> [a]
f t
a2
treeMapList t -> [a]
f (Leaf4 t
a1 t
a2 t
a3) = t -> [a]
f t
a1 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ t -> [a]
f t
a2 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ t -> [a]
f t
a3
treeMapList t -> [a]
f (Node2 t
a1 Tree234 t
t1 Tree234 t
t2) =
    (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t1 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ t -> [a]
f t
a1 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t2
treeMapList t -> [a]
f (Node3 t
a1 t
a2 Tree234 t
t1 Tree234 t
t2 Tree234 t
t3) =
    (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t1 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++
    t -> [a]
f t
a1 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t2 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ t -> [a]
f t
a2 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t3
treeMapList t -> [a]
f (Node4 t
a1 t
a2 t
a3 Tree234 t
t1 Tree234 t
t2 Tree234 t
t3 Tree234 t
t4) =
    (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t1 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++
    t -> [a]
f t
a1 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++
    (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t2 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++
    t -> [a]
f t
a2 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t3 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ t -> [a]
f t
a3 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ (t -> [a]) -> Tree234 t -> [a]
treeMapList t -> [a]
f Tree234 t
t4

treeMap :: (t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
Leaf = Tree234 a
forall a. Tree234 a
Leaf
treeMap t -> a
f (Leaf2 t
a1) = a -> Tree234 a
forall a. a -> Tree234 a
Leaf2 (t -> a
f t
a1)
treeMap t -> a
f (Leaf3 t
a1 t
a2) = a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 (t -> a
f t
a1) (t -> a
f t
a2)
treeMap t -> a
f (Leaf4 t
a1 t
a2 t
a3) = a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 (t -> a
f t
a1) (t -> a
f t
a2) (t -> a
f t
a3)
treeMap t -> a
f (Node2 t
a1 Tree234 t
t1 Tree234 t
t2) =
    a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 (t -> a
f t
a1) ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t1) ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t2)
treeMap t -> a
f (Node3 t
a1 t
a2 Tree234 t
t1 Tree234 t
t2 Tree234 t
t3) =
    a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 (t -> a
f t
a1) (t -> a
f t
a2) ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t1) ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t2) ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t3)
treeMap t -> a
f (Node4 t
a1 t
a2 t
a3 Tree234 t
t1 Tree234 t
t2 Tree234 t
t3 Tree234 t
t4) =
    a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 (t -> a
f t
a1)
          (t -> a
f t
a2)
          (t -> a
f t
a3)
          ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t1)
          ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t2)
          ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t3)
          ((t -> a) -> Tree234 t -> Tree234 a
treeMap t -> a
f Tree234 t
t4)

treeFromList :: (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
treeFromList a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp [a]
l = (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
-> Tree234 a
forall a.
(a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
-> Tree234 a
treeAddList a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp [a]
l Tree234 a
forall a. Tree234 a
Leaf

treeAddList :: (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
-> Tree234 a
treeAddList a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp [] Tree234 a
t = Tree234 a
t
treeAddList a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp (a
x : [a]
xs) Tree234 a
t =
    (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
-> Tree234 a
treeAddList a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp [a]
xs ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> Tree234 a
-> Tree234 a
forall a.
(a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> Tree234 a
-> Tree234 a
treeAdd a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
x Tree234 a
t)

treeRebuild :: (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeRebuild a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp Tree234 a
t = (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
forall a.
(a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
treeFromList a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp ((a -> [a]) -> Tree234 a -> [a]
forall t a. (t -> [a]) -> Tree234 t -> [a]
treeMapList (a -> [a] -> [a]
forall a. a -> [a] -> [a]
: []) Tree234 a
t)

treeCombine :: (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
-> Tree234 a
treeCombine a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp Tree234 a
t1 Tree234 a
t2 =
    (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
-> Tree234 a
forall a.
(a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> [a]
-> Tree234 a
-> Tree234 a
treeAddList a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp ((a -> [a]) -> Tree234 a -> [a]
forall t a. (t -> [a]) -> Tree234 t -> [a]
treeMapList (a -> [a] -> [a]
forall a. a -> [a] -> [a]
: []) Tree234 a
t2) Tree234 a
t1

treeAdd' :: (a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a -> Tree234 a
keep a -> Tree234 a -> Tree234 a -> Tree234 a
split Tree234 a
Leaf = Tree234 a -> Tree234 a
keep (a -> Tree234 a
forall a. a -> Tree234 a
Leaf2 a
a)
treeAdd' a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a -> Tree234 a
keep a -> Tree234 a -> Tree234 a -> Tree234 a
split (Leaf2 a
a1) =
    Tree234 a -> Tree234 a
keep (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a a
a1 (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 a
a a
a1) (a -> Tree234 a
forall a. a -> Tree234 a
Leaf2 (a -> a -> a
comb a
a a
a1)) (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 a
a1 a
a))
treeAdd' a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a -> Tree234 a
keep a -> Tree234 a -> Tree234 a -> Tree234 a
split (Leaf3 a
a1 a
a2) =
    Tree234 a -> Tree234 a
keep (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
              a
a1
              (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 a
a a
a1 a
a2)
              (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 (a -> a -> a
comb a
a a
a1) a
a2)
              (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a a
a2 (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 a
a1 a
a a
a2) (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 a
a1 (a -> a -> a
comb a
a a
a2)) (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 a
a1 a
a2 a
a)))
treeAdd' a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a -> Tree234 a
keep a -> Tree234 a -> Tree234 a -> Tree234 a
split (Leaf4 a
a1 a
a2 a
a3) =
    a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
        a
a2
        (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
             a
a1
             (a -> Tree234 a -> Tree234 a -> Tree234 a
split a
a2 (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 a
a a
a1) (a -> Tree234 a
forall a. a -> Tree234 a
Leaf2 a
a3))
             (Tree234 a -> Tree234 a
keep (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 (a -> a -> a
comb a
a a
a1) a
a2 a
a3))
             (a -> Tree234 a -> Tree234 a -> Tree234 a
split a
a2 (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 a
a1 a
a) (a -> Tree234 a
forall a. a -> Tree234 a
Leaf2 a
a3)))
        (Tree234 a -> Tree234 a
keep (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 a
a1 (a -> a -> a
comb a
a a
a2) a
a3))
        (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
             a
a3
             (a -> Tree234 a -> Tree234 a -> Tree234 a
split a
a2 (a -> Tree234 a
forall a. a -> Tree234 a
Leaf2 a
a1) (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 a
a a
a3))
             (Tree234 a -> Tree234 a
keep (a -> a -> a -> Tree234 a
forall a. a -> a -> a -> Tree234 a
Leaf4 a
a1 a
a2 (a -> a -> a
comb a
a a
a3)))
             (a -> Tree234 a -> Tree234 a -> Tree234 a
split a
a2 (a -> Tree234 a
forall a. a -> Tree234 a
Leaf2 a
a1) (a -> a -> Tree234 a
forall a. a -> a -> Tree234 a
Leaf3 a
a3 a
a)))
treeAdd' a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a -> Tree234 a
keep a -> Tree234 a -> Tree234 a -> Tree234 a
split (Node2 a
a1 Tree234 a
t1 Tree234 a
t2) =
    Tree234 a -> Tree234 a
keep (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
              a
a1
              ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                        a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                        a
a
                        (\Tree234 a
t1' -> a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a1 Tree234 a
t1' Tree234 a
t2)
                        (\a
a0' -> \Tree234 a
t0' -> \Tree234 a
t1' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a0' a
a1 Tree234 a
t0' Tree234 a
t1' Tree234 a
t2)
                        Tree234 a
t1)
              (a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 (a -> a -> a
comb a
a a
a1) Tree234 a
t1 Tree234 a
t2)
              ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                        a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                        a
a
                        (\Tree234 a
t2' -> a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a1 Tree234 a
t1 Tree234 a
t2')
                        (\a
a2' -> \Tree234 a
t2' -> \Tree234 a
t3' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 a
a2' Tree234 a
t1 Tree234 a
t2' Tree234 a
t3')
                        Tree234 a
t2))
treeAdd' a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a -> Tree234 a
keep a -> Tree234 a -> Tree234 a -> Tree234 a
split (Node3 a
a1 a
a2 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3) =
    Tree234 a -> Tree234 a
keep (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
              a
a1
              ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                        a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                        a
a
                        (\Tree234 a
t1' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 a
a2 Tree234 a
t1' Tree234 a
t2 Tree234 a
t3)
                        (\a
a0' -> \Tree234 a
t0' -> \Tree234 a
t1' -> a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a0' a
a1 a
a2 Tree234 a
t0' Tree234 a
t1' Tree234 a
t2 Tree234 a
t3)
                        Tree234 a
t1)
              (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 (a -> a -> a
comb a
a a
a1) a
a2 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3)
              (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
                   a
a2
                   ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                             a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                             a
a
                             (\Tree234 a
t2' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 a
a2 Tree234 a
t1 Tree234 a
t2' Tree234 a
t3)
                             (\a
a1_5' ->
                              \Tree234 a
t1_5' ->
                              \Tree234 a
t2' -> a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 a
a1_5' a
a2 Tree234 a
t1 Tree234 a
t1_5' Tree234 a
t2' Tree234 a
t3)
                             Tree234 a
t2)
                   (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 (a -> a -> a
comb a
a a
a2) Tree234 a
t1 Tree234 a
t2 Tree234 a
t3)
                   ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                             a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                             a
a
                             (\Tree234 a
t3' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 a
a2 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3')
                             (\a
a3' ->
                              \Tree234 a
t3' -> \Tree234 a
t4' -> a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 a
a2 a
a3' Tree234 a
t1 Tree234 a
t2 Tree234 a
t3' Tree234 a
t4')
                             Tree234 a
t3)))
treeAdd' a -> a -> a
comb a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a Tree234 a -> Tree234 a
keep a -> Tree234 a -> Tree234 a -> Tree234 a
split (Node4 a
a1 a
a2 a
a3 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 Tree234 a
t4) =
    a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
        a
a2
        (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
             a
a1
             (a -> Tree234 a -> Tree234 a -> Tree234 a
split a
a2
                    ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                              a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                              a
a
                              (\Tree234 a
t1' -> a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a1 Tree234 a
t1' Tree234 a
t2)
                              (\a
a0' -> \Tree234 a
t0' -> \Tree234 a
t1' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a0' a
a1 Tree234 a
t0' Tree234 a
t1' Tree234 a
t2)
                              Tree234 a
t1)
                    (a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a3 Tree234 a
t3 Tree234 a
t4))
             (Tree234 a -> Tree234 a
keep (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 (a -> a -> a
comb a
a a
a1) a
a2 a
a3 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 Tree234 a
t4))
             (a -> Tree234 a -> Tree234 a -> Tree234 a
split a
a2
                    ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                              a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                              a
a
                              (\Tree234 a
t2' -> a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a1 Tree234 a
t1 Tree234 a
t2')
                              (\a
a2' -> \Tree234 a
t2' -> \Tree234 a
t3' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a1 a
a2' Tree234 a
t1 Tree234 a
t2' Tree234 a
t3')
                              Tree234 a
t2)
                    (a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a3 Tree234 a
t3 Tree234 a
t4)))
        (Tree234 a -> Tree234 a
keep (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 (a -> a -> a
comb a
a a
a2) a
a3 Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 Tree234 a
t4))
        (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp a
a
             a
a3
             (a -> Tree234 a -> Tree234 a -> Tree234 a
split a
a2
                    (a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a1 Tree234 a
t1 Tree234 a
t2)
                    ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                              a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                              a
a
                              (\Tree234 a
t3' -> a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a3 Tree234 a
t3' Tree234 a
t4)
                              (\a
a2' -> \Tree234 a
t2' -> \Tree234 a
t3' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a2' a
a3 Tree234 a
t2' Tree234 a
t3' Tree234 a
t4)
                              Tree234 a
t3))
             (Tree234 a -> Tree234 a
keep (a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
forall a.
a
-> a
-> a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
-> Tree234 a
Node4 a
a1 a
a2 (a -> a -> a
comb a
a a
a3) Tree234 a
t1 Tree234 a
t2 Tree234 a
t3 Tree234 a
t4))
             (a -> Tree234 a -> Tree234 a -> Tree234 a
split a
a2
                    (a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a1 Tree234 a
t1 Tree234 a
t2)
                    ((a -> a -> a)
-> (a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a)
-> a
-> (Tree234 a -> Tree234 a)
-> (a -> Tree234 a -> Tree234 a -> Tree234 a)
-> Tree234 a
-> Tree234 a
treeAdd' a -> a -> a
comb
                              a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
cmp
                              a
a
                              (\Tree234 a
t4' -> a -> Tree234 a -> Tree234 a -> Tree234 a
forall a. a -> Tree234 a -> Tree234 a -> Tree234 a
Node2 a
a3 Tree234 a
t3 Tree234 a
t4')
                              (\a
a4' -> \Tree234 a
t4' -> \Tree234 a
t5' -> a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
forall a.
a -> a -> Tree234 a -> Tree234 a -> Tree234 a -> Tree234 a
Node3 a
a3 a
a4' Tree234 a
t3 Tree234 a
t4' Tree234 a
t5')
                              Tree234 a
t4)))

treeList :: Tree234 a -> [a]
treeList Tree234 a
t = (a -> [a]) -> Tree234 a -> [a]
forall t a. (t -> [a]) -> Tree234 t -> [a]
treeMapList (a -> [a] -> [a]
forall a. a -> [a] -> [a]
: []) Tree234 a
t