{-# OPTIONS_HADDOCK hide #-}
module Data.Tree.AVL.Push
(
pushL,pushR,
push,push',pushMaybe,pushMaybe',
) where
import Data.COrdering
import Data.Tree.AVL.Internals.Types(AVL(..))
import Data.Tree.AVL.BinPath(BinPath(..),openPathWith,writePath,insertPath)
push :: (e -> COrdering e) -> e -> AVL e -> AVL e
push :: forall e. (e -> COrdering e) -> e -> AVL e -> AVL e
push e -> COrdering e
c e
e0 = AVL e -> AVL e
put where
put :: AVL e -> AVL e
put AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E
put (N AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putN AVL e
l e
e AVL e
r
put (Z AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putZ AVL e
l e
e AVL e
r
put (P AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putP AVL e
l e
e AVL e
r
putN :: AVL e -> e -> AVL e -> AVL e
putN AVL e
l e
e AVL e
r = case e -> COrdering e
c e
e of
COrdering e
Lt -> AVL e -> e -> AVL e -> AVL e
putNL AVL e
l e
e AVL e
r
Eq e
e' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e' AVL e
r
COrdering e
Gt -> AVL e -> e -> AVL e -> AVL e
putNR AVL e
l e
e AVL e
r
putZ :: AVL e -> e -> AVL e -> AVL e
putZ AVL e
l e
e AVL e
r = case e -> COrdering e
c e
e of
COrdering e
Lt -> AVL e -> e -> AVL e -> AVL e
putZL AVL e
l e
e AVL e
r
Eq e
e' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e' AVL e
r
COrdering e
Gt -> AVL e -> e -> AVL e -> AVL e
putZR AVL e
l e
e AVL e
r
putP :: AVL e -> e -> AVL e -> AVL e
putP AVL e
l e
e AVL e
r = case e -> COrdering e
c e
e of
COrdering e
Lt -> AVL e -> e -> AVL e -> AVL e
putPL AVL e
l e
e AVL e
r
Eq e
e' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e' AVL e
r
COrdering e
Gt -> AVL e -> e -> AVL e -> AVL e
putPR AVL e
l e
e AVL e
r
{-# INLINE putNL #-}
putNL :: AVL e -> e -> AVL e -> AVL e
putNL AVL e
E e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E ) e
e AVL e
r
putNL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putN AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
putNL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putP AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
putNL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
ll e
le AVL e
lr
in case AVL e
l' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug0"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
{-# INLINE putZL #-}
putZL :: AVL e -> e -> AVL e -> AVL e
putZL AVL e
E e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E ) e
e AVL e
r
putZL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putN AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
putZL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putP AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
putZL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
ll e
le AVL e
lr
in case AVL e
l' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug1"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
{-# INLINE putZR #-}
putZR :: AVL e -> e -> AVL e -> AVL e
putZR AVL e
l e
e AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E )
putZR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
putZR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
putZR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
rl e
re AVL e
rr
in case AVL e
r' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug2"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
{-# INLINE putPR #-}
putPR :: AVL e -> e -> AVL e -> AVL e
putPR AVL e
l e
e AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E )
putPR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
putPR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
putPR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
rl e
re AVL e
rr
in case AVL e
r' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug3"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
{-# INLINE putNR #-}
putNR :: AVL e -> e -> AVL e -> AVL e
putNR AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug4"
putNR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
putNR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
putNR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = case e -> COrdering e
c e
re of
COrdering e
Lt -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRL AVL e
l e
e AVL e
rl e
re AVL e
rr
Eq e
re' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re' AVL e
rr)
COrdering e
Gt -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRR AVL e
l e
e AVL e
rl e
re AVL e
rr
{-# INLINE putPL #-}
putPL :: AVL e -> e -> AVL e -> AVL e
putPL AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug5"
putPL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putN AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
putPL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putP AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
putPL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = case e -> COrdering e
c e
le of
COrdering e
Lt -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLL AVL e
ll e
le AVL e
lr e
e AVL e
r
Eq e
le' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le' AVL e
lr) e
e AVL e
r
COrdering e
Gt -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLR AVL e
ll e
le AVL e
lr e
e AVL e
r
{-# INLINE putNRR #-}
putNRR :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRR AVL e
l e
e AVL e
rl e
re AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rl) e
re (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E)
putNRR AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rrl e
rre AVL e
rrr
in AVL e
rr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
putNRR AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rrl e
rre AVL e
rrr
in AVL e
rr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
putNRR AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
rrl e
rre AVL e
rrr
in case AVL e
rr' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug6"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rl) e
re AVL e
rr'
{-# INLINE putPLL #-}
putPLL :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLL AVL e
E e
le AVL e
lr e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E) e
le (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lr e
e AVL e
r)
putPLL (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putN AVL e
lll e
lle AVL e
llr
in AVL e
ll' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
putPLL (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putP AVL e
lll e
lle AVL e
llr
in AVL e
ll' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
putPLL (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
lll e
lle AVL e
llr
in case AVL e
ll' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug7"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lr e
e AVL e
r)
{-# INLINE putNRL #-}
putNRL :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRL AVL e
l e
e AVL e
E e
re AVL e
rr = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
forall e. AVL e
E) e
e0 (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
re AVL e
rr)
putNRL AVL e
l e
e (N AVL e
rll e
rle AVL e
rlr) e
re AVL e
rr = let rl' :: AVL e
rl' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rll e
rle AVL e
rlr
in AVL e
rl' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl' e
re AVL e
rr)
putNRL AVL e
l e
e (P AVL e
rll e
rle AVL e
rlr) e
re AVL e
rr = let rl' :: AVL e
rl' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rll e
rle AVL e
rlr
in AVL e
rl' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl' e
re AVL e
rr)
putNRL AVL e
l e
e (Z AVL e
rll e
rle AVL e
rlr) e
re AVL e
rr = let rl' :: AVL e
rl' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
rll e
rle AVL e
rlr
in case AVL e
rl' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug8"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl' e
re AVL e
rr)
N AVL e
rll' e
rle' AVL e
rlr' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
rll') e
rle' (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rlr' e
re AVL e
rr)
P AVL e
rll' e
rle' AVL e
rlr' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rll') e
rle' (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
rlr' e
re AVL e
rr)
{-# INLINE putPLR #-}
putPLR :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLR AVL e
ll e
le AVL e
E e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
forall e. AVL e
E) e
e0 (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e AVL e
r)
putPLR AVL e
ll e
le (N AVL e
lrl e
lre AVL e
lrr) e
e AVL e
r = let lr' :: AVL e
lr' = AVL e -> e -> AVL e -> AVL e
putN AVL e
lrl e
lre AVL e
lrr
in AVL e
lr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
lr') e
e AVL e
r
putPLR AVL e
ll e
le (P AVL e
lrl e
lre AVL e
lrr) e
e AVL e
r = let lr' :: AVL e
lr' = AVL e -> e -> AVL e -> AVL e
putP AVL e
lrl e
lre AVL e
lrr
in AVL e
lr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
lr') e
e AVL e
r
putPLR AVL e
ll e
le (Z AVL e
lrl e
lre AVL e
lrr) e
e AVL e
r = let lr' :: AVL e
lr' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
lrl e
lre AVL e
lrr
in case AVL e
lr' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push: Bug9"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
lr') e
e AVL e
r
N AVL e
lrl' e
lre' AVL e
lrr' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
ll e
le AVL e
lrl') e
lre' (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lrr' e
e AVL e
r)
P AVL e
lrl' e
lre' AVL e
lrr' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
lrl') e
lre' (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
lrr' e
e AVL e
r)
push' :: (e -> COrdering e) -> e -> AVL e -> AVL e
push' :: forall e. (e -> COrdering e) -> e -> AVL e -> AVL e
push' e -> COrdering e
c e
e0 = AVL e -> AVL e
put where
put :: AVL e -> AVL e
put AVL e
E = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E
put (N AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putN AVL e
l e
e AVL e
r
put (Z AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putZ AVL e
l e
e AVL e
r
put (P AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putP AVL e
l e
e AVL e
r
putN :: AVL e -> e -> AVL e -> AVL e
putN AVL e
l e
e AVL e
r = case e -> COrdering e
c e
e of
COrdering e
Lt -> AVL e -> e -> AVL e -> AVL e
putNL AVL e
l e
e AVL e
r
Eq e
e' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e' AVL e
r
COrdering e
Gt -> AVL e -> e -> AVL e -> AVL e
putNR AVL e
l e
e AVL e
r
putZ :: AVL e -> e -> AVL e -> AVL e
putZ AVL e
l e
e AVL e
r = case e -> COrdering e
c e
e of
COrdering e
Lt -> AVL e -> e -> AVL e -> AVL e
putZL AVL e
l e
e AVL e
r
Eq e
e' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e' AVL e
r
COrdering e
Gt -> AVL e -> e -> AVL e -> AVL e
putZR AVL e
l e
e AVL e
r
putP :: AVL e -> e -> AVL e -> AVL e
putP AVL e
l e
e AVL e
r = case e -> COrdering e
c e
e of
COrdering e
Lt -> AVL e -> e -> AVL e -> AVL e
putPL AVL e
l e
e AVL e
r
Eq e
e' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e' AVL e
r
COrdering e
Gt -> AVL e -> e -> AVL e -> AVL e
putPR AVL e
l e
e AVL e
r
{-# INLINE putNL #-}
putNL :: AVL e -> e -> AVL e -> AVL e
putNL AVL e
E e
e AVL e
r = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E ) e
e AVL e
r
putNL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putN AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
putNL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putP AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
putNL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
ll e
le AVL e
lr
in case AVL e
l' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug0"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
{-# INLINE putZL #-}
putZL :: AVL e -> e -> AVL e -> AVL e
putZL AVL e
E e
e AVL e
r = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E ) e
e AVL e
r
putZL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putN AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
putZL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putP AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
putZL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
ll e
le AVL e
lr
in case AVL e
l' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug1"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
{-# INLINE putZR #-}
putZR :: AVL e -> e -> AVL e -> AVL e
putZR AVL e
l e
e AVL e
E = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E)
putZR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
putZR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
putZR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
rl e
re AVL e
rr
in case AVL e
r' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug2"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
{-# INLINE putPR #-}
putPR :: AVL e -> e -> AVL e -> AVL e
putPR AVL e
l e
e AVL e
E = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E)
putPR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
putPR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
putPR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
rl e
re AVL e
rr
in case AVL e
r' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug3"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
{-# INLINE putNR #-}
putNR :: AVL e -> e -> AVL e -> AVL e
putNR AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug4"
putNR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
putNR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
putNR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = case e -> COrdering e
c e
re of
COrdering e
Lt -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRL AVL e
l e
e AVL e
rl e
re AVL e
rr
Eq e
re' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re' AVL e
rr)
COrdering e
Gt -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRR AVL e
l e
e AVL e
rl e
re AVL e
rr
{-# INLINE putPL #-}
putPL :: AVL e -> e -> AVL e -> AVL e
putPL AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug5"
putPL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putN AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
putPL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putP AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
putPL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = case e -> COrdering e
c e
le of
COrdering e
Lt -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLL AVL e
ll e
le AVL e
lr e
e AVL e
r
Eq e
le' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le' AVL e
lr) e
e AVL e
r
COrdering e
Gt -> AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLR AVL e
ll e
le AVL e
lr e
e AVL e
r
{-# INLINE putNRR #-}
putNRR :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRR AVL e
l e
e AVL e
rl e
re AVL e
E = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rl) e
re (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E)
putNRR AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rrl e
rre AVL e
rrr
in AVL e
rr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
putNRR AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rrl e
rre AVL e
rrr
in AVL e
rr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
putNRR AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
rrl e
rre AVL e
rrr
in case AVL e
rr' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug6"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rl) e
re AVL e
rr'
{-# INLINE putPLL #-}
putPLL :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLL AVL e
E e
le AVL e
lr e
e AVL e
r = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E) e
le (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lr e
e AVL e
r)
putPLL (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putN AVL e
lll e
lle AVL e
llr
in AVL e
ll' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
putPLL (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putP AVL e
lll e
lle AVL e
llr
in AVL e
ll' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
putPLL (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
lll e
lle AVL e
llr
in case AVL e
ll' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug7"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lr e
e AVL e
r)
{-# INLINE putNRL #-}
putNRL :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRL AVL e
l e
e AVL e
E e
re AVL e
rr = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
forall e. AVL e
E) e
e0 (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
re AVL e
rr)
putNRL AVL e
l e
e (N AVL e
rll e
rle AVL e
rlr) e
re AVL e
rr = let rl' :: AVL e
rl' = AVL e -> e -> AVL e -> AVL e
putN AVL e
rll e
rle AVL e
rlr
in AVL e
rl' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl' e
re AVL e
rr)
putNRL AVL e
l e
e (P AVL e
rll e
rle AVL e
rlr) e
re AVL e
rr = let rl' :: AVL e
rl' = AVL e -> e -> AVL e -> AVL e
putP AVL e
rll e
rle AVL e
rlr
in AVL e
rl' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl' e
re AVL e
rr)
putNRL AVL e
l e
e (Z AVL e
rll e
rle AVL e
rlr) e
re AVL e
rr = let rl' :: AVL e
rl' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
rll e
rle AVL e
rlr
in case AVL e
rl' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug8"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl' e
re AVL e
rr)
N AVL e
rll' e
rle' AVL e
rlr' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
rll') e
rle' (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rlr' e
re AVL e
rr)
P AVL e
rll' e
rle' AVL e
rlr' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rll') e
rle' (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
rlr' e
re AVL e
rr)
{-# INLINE putPLR #-}
putPLR :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLR AVL e
ll e
le AVL e
E e
e AVL e
r = e
e0 e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
forall e. AVL e
E) e
e0 (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e AVL e
r)
putPLR AVL e
ll e
le (N AVL e
lrl e
lre AVL e
lrr) e
e AVL e
r = let lr' :: AVL e
lr' = AVL e -> e -> AVL e -> AVL e
putN AVL e
lrl e
lre AVL e
lrr
in AVL e
lr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
lr') e
e AVL e
r
putPLR AVL e
ll e
le (P AVL e
lrl e
lre AVL e
lrr) e
e AVL e
r = let lr' :: AVL e
lr' = AVL e -> e -> AVL e -> AVL e
putP AVL e
lrl e
lre AVL e
lrr
in AVL e
lr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
lr') e
e AVL e
r
putPLR AVL e
ll e
le (Z AVL e
lrl e
lre AVL e
lrr) e
e AVL e
r = let lr' :: AVL e
lr' = AVL e -> e -> AVL e -> AVL e
putZ AVL e
lrl e
lre AVL e
lrr
in case AVL e
lr' of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"push': Bug9"
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
lr') e
e AVL e
r
N AVL e
lrl' e
lre' AVL e
lrr' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
ll e
le AVL e
lrl') e
lre' (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lrr' e
e AVL e
r)
P AVL e
lrl' e
lre' AVL e
lrr' -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll e
le AVL e
lrl') e
lre' (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
lrr' e
e AVL e
r)
pushMaybe :: (e -> COrdering (Maybe e)) -> e -> AVL e -> AVL e
pushMaybe :: forall e. (e -> COrdering (Maybe e)) -> e -> AVL e -> AVL e
pushMaybe e -> COrdering (Maybe e)
c e
e AVL e
t = case (e -> COrdering (Maybe e)) -> AVL e -> BinPath (Maybe e)
forall e a. (e -> COrdering a) -> AVL e -> BinPath a
openPathWith e -> COrdering (Maybe e)
c AVL e
t of
FullBP Int#
_ Maybe e
Nothing -> AVL e
t
FullBP Int#
p (Just e
e') -> Int# -> e -> AVL e -> AVL e
forall e. Int# -> e -> AVL e -> AVL e
writePath Int#
p e
e' AVL e
t
EmptyBP Int#
p -> Int# -> e -> AVL e -> AVL e
forall e. Int# -> e -> AVL e -> AVL e
insertPath Int#
p e
e AVL e
t
pushMaybe' :: (e -> COrdering (Maybe e)) -> e -> AVL e -> AVL e
pushMaybe' :: forall e. (e -> COrdering (Maybe e)) -> e -> AVL e -> AVL e
pushMaybe' e -> COrdering (Maybe e)
c e
e AVL e
t = case (e -> COrdering (Maybe e)) -> AVL e -> BinPath (Maybe e)
forall e a. (e -> COrdering a) -> AVL e -> BinPath a
openPathWith e -> COrdering (Maybe e)
c AVL e
t of
FullBP Int#
_ Maybe e
Nothing -> AVL e
t
FullBP Int#
p (Just e
e') -> Int# -> e -> AVL e -> AVL e
forall e. Int# -> e -> AVL e -> AVL e
writePath Int#
p e
e' AVL e
t
EmptyBP Int#
p -> e
e e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` Int# -> e -> AVL e -> AVL e
forall e. Int# -> e -> AVL e -> AVL e
insertPath Int#
p e
e AVL e
t
pushL :: e -> AVL e -> AVL e
pushL :: forall e. e -> AVL e -> AVL e
pushL e
e0 = AVL e -> AVL e
pushL' where
pushL' :: AVL e -> AVL e
pushL' AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E
pushL' (N AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putNL AVL e
l e
e AVL e
r
pushL' (Z AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putZL AVL e
l e
e AVL e
r
pushL' (P AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putPL AVL e
l e
e AVL e
r
putNL :: AVL e -> e -> AVL e -> AVL e
putNL AVL e
E e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E) e
e AVL e
r
putNL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putNL AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
putNL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putPL AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
putNL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putZL AVL e
ll e
le AVL e
lr
in case AVL e
l' of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l' e
e AVL e
r
P AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushL: Bug0"
putZL :: AVL e -> e -> AVL e -> AVL e
putZL AVL e
E e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E) e
e AVL e
r
putZL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putNL AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
putZL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putPL AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
putZL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putZL AVL e
ll e
le AVL e
lr
in case AVL e
l' of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l' e
e AVL e
r
N AVL e
_ e
_ AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushL: Bug1"
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
putPL :: AVL e -> e -> AVL e -> AVL e
putPL AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushL: Bug2"
putPL (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putNL AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
putPL (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> AVL e
putPL AVL e
ll e
le AVL e
lr
in AVL e
l' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l' e
e AVL e
r
putPL (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLL AVL e
ll e
le AVL e
lr e
e AVL e
r
{-# INLINE putPLL #-}
putPLL :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putPLL AVL e
E e
le AVL e
lr e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E) e
le (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lr e
e AVL e
r)
putPLL (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putNL AVL e
lll e
lle AVL e
llr
in AVL e
ll' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
putPLL (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putPL AVL e
lll e
lle AVL e
llr
in AVL e
ll' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
putPLL (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let ll' :: AVL e
ll' = AVL e -> e -> AVL e -> AVL e
putZL AVL e
lll e
lle AVL e
llr
in case AVL e
ll' of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le AVL e
lr) e
e AVL e
r
N AVL e
_ e
_ AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushL: Bug3"
AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
ll' e
le (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
lr e
e AVL e
r)
pushR :: AVL e -> e -> AVL e
pushR :: forall e. AVL e -> e -> AVL e
pushR AVL e
t e
e0 = AVL e -> AVL e
pushR' AVL e
t where
pushR' :: AVL e -> AVL e
pushR' AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E
pushR' (N AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putNR AVL e
l e
e AVL e
r
pushR' (Z AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putZR AVL e
l e
e AVL e
r
pushR' (P AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> AVL e
putPR AVL e
l e
e AVL e
r
putZR :: AVL e -> e -> AVL e -> AVL e
putZR AVL e
l e
e AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E)
putZR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putNR AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
putZR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putPR AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
putZR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putZR AVL e
rl e
re AVL e
rr
in case AVL e
r' of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
N AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushR: Bug0"
putPR :: AVL e -> e -> AVL e -> AVL e
putPR AVL e
l e
e AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E)
putPR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putNR AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
putPR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putPR AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
putPR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putZR AVL e
rl e
re AVL e
rr
in case AVL e
r' of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
l e
e AVL e
r'
N AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
r'
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushR: Bug1"
putNR :: AVL e -> e -> AVL e -> AVL e
putNR AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushR: Bug2"
putNR AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putNR AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
putNR AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> AVL e
putPR AVL e
rl e
re AVL e
rr
in AVL e
r' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e AVL e
r'
putNR AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRR AVL e
l e
e AVL e
rl e
re AVL e
rr
{-# INLINE putNRR #-}
putNRR :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
putNRR AVL e
l e
e AVL e
rl e
re AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rl) e
re (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
forall e. AVL e
E e
e0 AVL e
forall e. AVL e
E)
putNRR AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putNR AVL e
rrl e
rre AVL e
rrr
in AVL e
rr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
putNRR AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putPR AVL e
rrl e
rre AVL e
rrr
in AVL e
rr' AVL e -> AVL e -> AVL e
forall a b. a -> b -> b
`seq` AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
putNRR AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = let rr' :: AVL e
rr' = AVL e -> e -> AVL e -> AVL e
putZR AVL e
rrl e
rre AVL e
rrr
in case AVL e
rr' of
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
rl e
re AVL e
rr')
N AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
Z AVL e
l e
e AVL e
rl) e
re AVL e
rr'
AVL e
_ -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"pushR: Bug3"