module Data.Tree.AVL.Internals.DelUtils
(
delRN,delRZ,delRP,delLN,delLZ,delLP,
popRN,popRZ,popRP,popLN,popLZ,popLP,
popHL,popHLN,popHLZ,popHLP,
chkLN,chkLZ,chkLP,chkRN,chkRZ,chkRP,
chkLN',chkLZ',chkLP',chkRN',chkRZ',chkRP',
subN,subZR,subZL,subP,
deletePath,
) where
import Data.Tree.AVL.Internals.Types(AVL(..))
import Data.Tree.AVL.BinPath(sel,goL,goR)
import GHC.Base
#include "ghcdefs.h"
delLN :: AVL e -> e -> AVL e -> AVL e
delLN :: forall e. AVL e -> e -> AVL e -> AVL e
delLN AVL e
E e
_ AVL e
r = AVL e
r
delLN (N AVL e
ll 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
chkLN (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delLN AVL e
ll e
le AVL e
lr) e
e AVL e
r
delLN (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLNZ AVL e
ll e
le AVL e
lr e
e AVL e
r
delLN (P AVL e
ll 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
chkLN (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delLP AVL e
ll e
le AVL e
lr) e
e AVL e
r
delLZ :: AVL e -> e -> AVL e -> AVL e
delLZ :: forall e. AVL e -> e -> AVL e -> AVL e
delLZ AVL e
E e
_ AVL e
_ = AVL e
forall e. AVL e
E
delLZ (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZN AVL e
ll e
le AVL e
lr e
e AVL e
r
delLZ (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZZ AVL e
ll e
le AVL e
lr e
e AVL e
r
delLZ (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZP AVL e
ll e
le AVL e
lr e
e AVL e
r
delLP :: AVL e -> e -> AVL e -> AVL e
delLP :: forall e. AVL e -> e -> AVL e -> AVL e
delLP AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"delLP: Bug0"
delLP (N AVL e
ll 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
chkLP (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delLN AVL e
ll e
le AVL e
lr) e
e AVL e
r
delLP (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLPZ AVL e
ll e
le AVL e
lr e
e AVL e
r
delLP (P AVL e
ll 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
chkLP (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delLP AVL e
ll e
le AVL e
lr) e
e AVL e
r
{-# INLINE delLNZ #-}
delLNZ :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLNZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLNZ AVL e
E e
_ AVL e
_ e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalN AVL e
forall e. AVL e
E e
e AVL e
r
delLNZ (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZN AVL e
lll e
lle AVL e
llr 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
delLNZ (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZZ AVL e
lll e
lle AVL e
llr 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
delLNZ (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZP AVL e
lll e
lle AVL e
llr 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
delLZZ :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZZ AVL e
E e
_ AVL e
_ e
e AVL e
r = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
N AVL e
forall e. AVL e
E e
e AVL e
r
delLZZ (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZN AVL e
lll e
lle AVL e
llr 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
delLZZ (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZZ AVL e
lll e
lle AVL e
llr 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
delLZZ (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZP AVL e
lll e
lle AVL e
llr 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
{-# INLINE delLPZ #-}
delLPZ :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLPZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLPZ AVL e
E e
_ AVL e
_ e
e AVL 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
e AVL e
forall e. AVL e
E
delLPZ (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZN AVL e
lll e
lle AVL e
llr 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
delLPZ (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZZ AVL e
lll e
lle AVL e
llr 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
delLPZ (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = let l' :: AVL e
l' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZP AVL e
lll e
lle AVL e
llr 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
{-# INLINE delLZN #-}
delLZN :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZN :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZN AVL e
ll 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
chkLZ (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delLN AVL e
ll e
le AVL e
lr) e
e AVL e
r
{-# INLINE delLZP #-}
delLZP :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZP :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delLZP AVL e
ll 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
chkLZ (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delLP AVL e
ll e
le AVL e
lr) e
e AVL e
r
delRN :: AVL e -> e -> AVL e -> AVL e
delRN :: forall e. AVL e -> e -> AVL e -> AVL e
delRN AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"delRN: Bug0"
delRN AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delRN AVL e
rl e
re AVL e
rr)
delRN AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRNZ AVL e
l e
e AVL e
rl e
re AVL e
rr
delRN AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delRP AVL e
rl e
re AVL e
rr)
delRZ :: AVL e -> e -> AVL e -> AVL e
delRZ :: forall e. AVL e -> e -> AVL e -> AVL e
delRZ AVL e
_ e
_ AVL e
E = AVL e
forall e. AVL e
E
delRZ AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZN AVL e
l e
e AVL e
rl e
re AVL e
rr
delRZ AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZZ AVL e
l e
e AVL e
rl e
re AVL e
rr
delRZ AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZP AVL e
l e
e AVL e
rl e
re AVL e
rr
delRP :: AVL e -> e -> AVL e -> AVL e
delRP :: forall e. AVL e -> e -> AVL e -> AVL e
delRP AVL e
l e
_ AVL e
E = AVL e
l
delRP AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delRN AVL e
rl e
re AVL e
rr)
delRP AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRPZ AVL e
l e
e AVL e
rl e
re AVL e
rr
delRP AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delRP AVL e
rl e
re AVL e
rr)
delRNZ :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
{-# INLINE delRNZ #-}
delRNZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRNZ AVL e
_ e
e AVL e
_ e
_ 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
e AVL e
forall e. AVL e
E
delRNZ AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZN AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRNZ AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZZ AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRNZ AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZP AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRZZ :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZZ AVL e
l e
e AVL e
_ e
_ AVL 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
forall e. AVL e
E
delRZZ AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZN AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRZZ AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZZ AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRZZ AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZP AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRPZ :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
{-# INLINE delRPZ #-}
delRPZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRPZ AVL e
l e
e AVL e
_ e
_ AVL e
E = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalP AVL e
l e
e AVL e
forall e. AVL e
E
delRPZ AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZN AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRPZ AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZZ AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRPZ AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = let r' :: AVL e
r' = AVL e -> e -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZP AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr 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'
delRZN :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
{-# INLINE delRZN #-}
delRZN :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZN AVL e
l e
e AVL e
rl e
re AVL e
rr = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delRN AVL e
rl e
re AVL e
rr)
delRZP :: AVL e -> e -> AVL e -> e -> AVL e -> AVL e
{-# INLINE delRZP #-}
delRZP :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> AVL e
delRZP AVL e
l e
e AVL e
rl e
re AVL e
rr = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
delRP AVL e
rl e
re AVL e
rr)
popLN :: AVL e -> e -> AVL e -> UBT2(e,AVL e)
popLN :: forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLN AVL e
E e
e AVL e
r = UBT2(AVL e
e,r)
popLN (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLN AVL e
ll e
le AVL e
lr of
UBT2(AVL e
v,l) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e #) -> (# e, AVL e #)
forall a b. a -> b -> b
`seq` UBT2(AVL e
v,t)
popLN (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLNZ AVL e
ll e
le AVL e
lr e
e AVL e
r
popLN (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLP AVL e
ll e
le AVL e
lr of
UBT2(AVL e
v,l) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e #) -> (# e, AVL e #)
forall a b. a -> b -> b
`seq` UBT2(AVL e
v,t)
popLZ :: AVL e -> e -> AVL e -> UBT2(e,AVL e)
popLZ :: forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLZ AVL e
E e
e AVL e
_ = UBT2(AVL e
forall e. AVL e
e,E)
popLZ (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZN AVL e
ll e
le AVL e
lr e
e AVL e
r
popLZ (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZZ AVL e
ll e
le AVL e
lr e
e AVL e
r
popLZ (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZP AVL e
ll e
le AVL e
lr e
e AVL e
r
popLP :: AVL e -> e -> AVL e -> UBT2(e,AVL e)
popLP :: forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLP AVL e
E e
_ AVL e
_ = [Char] -> (# e, AVL e #)
forall a. HasCallStack => [Char] -> a
error [Char]
"popLP: Bug!"
popLP (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLN AVL e
ll e
le AVL e
lr of
UBT2(AVL e
v,l) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e #) -> (# e, AVL e #)
forall a b. a -> b -> b
`seq` UBT2(AVL e
v,t)
popLP (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLPZ AVL e
ll e
le AVL e
lr e
e AVL e
r
popLP (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLP AVL e
ll e
le AVL e
lr of
UBT2(AVL e
v,l) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e #) -> (# e, AVL e #)
forall a b. a -> b -> b
`seq` UBT2(AVL e
v,t)
popLNZ :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(e,AVL e)
{-# INLINE popLNZ #-}
popLNZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLNZ AVL e
E e
le AVL e
_ e
e AVL e
r = let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalN AVL e
forall e. AVL e
E e
e AVL e
r
in AVL e
t AVL e -> (# e, AVL e #) -> (# e, AVL e #)
forall a b. a -> b -> b
`seq` UBT2(le,t)
popLNZ (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZN AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
N e
l AVL e
e r)
popLNZ (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZZ AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
N e
l AVL e
e r)
popLNZ (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZP AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
N e
l AVL e
e r)
popLZZ :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(e,AVL e)
popLZZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZZ AVL e
E e
le AVL e
_ e
e AVL e
r = UBT2(leAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
forall e. AVL e
N e
E AVL e
e r)
popLZZ (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZN AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
Z e
l AVL e
e r)
popLZZ (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZZ AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
Z e
l AVL e
e r)
popLZZ (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZP AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
Z e
l AVL e
e r)
popLPZ :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(e,AVL e)
{-# INLINE popLPZ #-}
popLPZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLPZ AVL e
E e
le AVL e
_ e
e AVL e
_ = UBT2(leAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
forall e. AVL e
Z e
E AVL e
forall e. AVL e
e E)
popLPZ (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZN AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
P e
l AVL e
e r)
popLPZ (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZZ AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
P e
l AVL e
e r)
popLPZ (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZP AVL e
lll e
lle AVL e
llr e
le AVL e
lr of
UBT2(AVL e
v,l) -> UBT2(vAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
P e
l AVL e
e r)
popLZN :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(e,AVL e)
popLZN :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZN AVL e
ll e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLN AVL e
ll e
le AVL e
lr of
UBT2(AVL e
v,l) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e #) -> (# e, AVL e #)
forall a b. a -> b -> b
`seq` UBT2(AVL e
v,t)
popLZP :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(e,AVL e)
popLZP :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e #)
popLZP AVL e
ll e
le AVL e
lr e
e AVL e
r = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLP AVL e
ll e
le AVL e
lr of
UBT2(AVL e
v,l) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e #) -> (# e, AVL e #)
forall a b. a -> b -> b
`seq` UBT2(AVL e
v,t)
popRN :: AVL e -> e -> AVL e -> UBT2(AVL e,e)
popRN :: forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
_ e
_ AVL e
E = [Char] -> (# AVL e, e #)
forall a. HasCallStack => [Char] -> a
error [Char]
"popRN: Bug!"
popRN AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
rl e
re AVL e
rr of
UBT2(e
r,v) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# AVL e, e #) -> (# AVL e, e #)
forall a b. a -> b -> b
`seq` UBT2(e
t,v)
popRN AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRNZ AVL e
l e
e AVL e
rl e
re AVL e
rr
popRN AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
rl e
re AVL e
rr of
UBT2(e
r,v) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# AVL e, e #) -> (# AVL e, e #)
forall a b. a -> b -> b
`seq` UBT2(e
t,v)
popRZ :: AVL e -> e -> AVL e -> UBT2(AVL e,e)
popRZ :: forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRZ AVL e
_ e
e AVL e
E = UBT2(e
E,e)
popRZ AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZN AVL e
l e
e AVL e
rl e
re AVL e
rr
popRZ AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZZ AVL e
l e
e AVL e
rl e
re AVL e
rr
popRZ AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZP AVL e
l e
e AVL e
rl e
re AVL e
rr
popRP :: AVL e -> e -> AVL e -> UBT2(AVL e,e)
popRP :: forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
l e
e AVL e
E = UBT2(e
l,e)
popRP AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
rl e
re AVL e
rr of
UBT2(e
r,v) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# AVL e, e #) -> (# AVL e, e #)
forall a b. a -> b -> b
`seq` UBT2(e
t,v)
popRP AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRPZ AVL e
l e
e AVL e
rl e
re AVL e
rr
popRP AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
rl e
re AVL e
rr of
UBT2(e
r,v) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# AVL e, e #) -> (# AVL e, e #)
forall a b. a -> b -> b
`seq` UBT2(e
t,v)
popRNZ :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(AVL e,e)
{-# INLINE popRNZ #-}
popRNZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRNZ AVL e
_ e
e AVL e
_ e
re AVL e
E = UBT2(Z E e E, re)
popRNZ AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZN AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(N l e re
, v)
popRNZ AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZZ AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(N l e re
, v)
popRNZ AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZP AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(N l e re
, v)
popRZZ :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(AVL e,e)
popRZZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZZ AVL e
l e
e AVL e
_ e
re AVL e
E = UBT2(P l e E, re)
popRZZ AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZN AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(Z l e re
, v)
popRZZ AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZZ AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(Z l e re
, v)
popRZZ AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZP AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(Z l e re
, v)
popRPZ :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(AVL e,e)
{-# INLINE popRPZ #-}
popRPZ :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRPZ AVL e
l e
e AVL e
_ e
re AVL e
E = let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalP AVL e
l e
e AVL e
forall e. AVL e
E
in AVL e
t AVL e -> (# AVL e, e #) -> (# AVL e, e #)
forall a b. a -> b -> b
`seq` UBT2(t,re)
popRPZ AVL e
l e
e AVL e
rl e
re (N AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZN AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(P l e re
, v)
popRPZ AVL e
l e
e AVL e
rl e
re (Z AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZZ AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(P l e re
, v)
popRPZ AVL e
l e
e AVL e
rl e
re (P AVL e
rrl e
rre AVL e
rrr) = case AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZP AVL e
rl e
re AVL e
rrl e
rre AVL e
rrr of
UBT2(e
r,v) -> UBT2(P l e re
, v)
popRZN :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(AVL e,e)
popRZN :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZN AVL e
l e
e AVL e
rl e
re AVL e
rr = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
rl e
re AVL e
rr of
UBT2(e
r,v) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# AVL e, e #) -> (# AVL e, e #)
forall a b. a -> b -> b
`seq` UBT2(e
t,v)
popRZP :: AVL e -> e -> AVL e -> e -> AVL e -> UBT2(AVL e,e)
popRZP :: forall e. AVL e -> e -> AVL e -> e -> AVL e -> (# AVL e, e #)
popRZP AVL e
l e
e AVL e
rl e
re AVL e
rr = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
rl e
re AVL e
rr of
UBT2(e
r,v) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# AVL e, e #) -> (# AVL e, e #)
forall a b. a -> b -> b
`seq` UBT2(e
t,v)
deletePath :: UINT -> AVL e -> AVL e
deletePath :: forall e. Int# -> AVL e -> AVL e
deletePath Int#
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"deletePath: Element not found."
deletePath Int#
p (N AVL e
l e
e AVL e
r) = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delN Int#
p AVL e
l e
e AVL e
r
deletePath Int#
p (Z AVL e
l e
e AVL e
r) = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZ Int#
p AVL e
l e
e AVL e
r
deletePath Int#
p (P AVL e
l e
e AVL e
r) = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delP Int#
p AVL e
l e
e AVL e
r
delN :: UINT -> AVL e -> e -> AVL e -> AVL e
delN :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delN Int#
p AVL e
l e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNL Int#
p AVL e
l e
e AVL e
r
Ordering
EQ -> AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subN AVL e
l AVL e
r
Ordering
GT -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNR Int#
p AVL e
l e
e AVL e
r
delZ :: UINT -> AVL e -> e -> AVL e -> AVL e
delZ :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZ Int#
p AVL e
l e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZL Int#
p AVL e
l e
e AVL e
r
Ordering
EQ -> AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subZR AVL e
l AVL e
r
Ordering
GT -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZR Int#
p AVL e
l e
e AVL e
r
delP :: UINT -> AVL e -> e -> AVL e -> AVL e
delP :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delP Int#
p AVL e
l e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPL Int#
p AVL e
l e
e AVL e
r
Ordering
EQ -> AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subP AVL e
l AVL e
r
Ordering
GT -> Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPR Int#
p AVL e
l e
e AVL e
r
delNL :: UINT -> AVL e -> e -> AVL e -> AVL e
delNL :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNL Int#
p AVL e
t = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dNL (Int# -> Int#
goL Int#
p) AVL e
t
{-# INLINE dNL #-}
dNL :: UINT -> AVL e -> e -> AVL e -> AVL e
dNL :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dNL Int#
_ AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"deletePath: Element not found."
dNL Int#
p (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNL Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subN AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNR Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
dNL Int#
p (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> let l' :: AVL e
l' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZL Int#
p 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
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN' (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subZR AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> let l' :: AVL e
l' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZR Int#
p 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
dNL Int#
p (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPL Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subP AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPR Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
delNR :: UINT -> AVL e -> e -> AVL e -> AVL e
delNR :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNR Int#
p AVL e
t = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dNR (Int# -> Int#
goR Int#
p) AVL e
t
{-# INLINE dNR #-}
dNR :: UINT -> AVL e -> e -> AVL e -> AVL e
dNR :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dNR Int#
_ AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"delNR: Bug0"
dNR Int#
p AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNL Int#
p AVL e
rl e
re AVL e
rr)
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subN AVL e
rl AVL e
rr)
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNR Int#
p AVL e
rl e
re AVL e
rr)
dNR Int#
p AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> let r' :: AVL e
r' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZL Int#
p 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'
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN' AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subZL AVL e
rl AVL e
rr)
Ordering
GT -> let r' :: AVL e
r' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZR Int#
p 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'
dNR Int#
p AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPL Int#
p AVL e
rl e
re AVL e
rr)
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subP AVL e
rl AVL e
rr)
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPR Int#
p AVL e
rl e
re AVL e
rr)
delZL :: UINT -> AVL e -> e -> AVL e -> AVL e
delZL :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZL Int#
p AVL e
t = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dZL (Int# -> Int#
goL Int#
p) AVL e
t
{-# INLINE dZL #-}
dZL :: UINT -> AVL e -> e -> AVL e -> AVL e
dZL :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dZL Int#
_ AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"deletePath: Element not found."
dZL Int#
p (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNL Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subN AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNR Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
dZL Int#
p (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> let l' :: AVL e
l' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZL Int#
p 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
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ' (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subZR AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> let l' :: AVL e
l' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZR Int#
p 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
dZL Int#
p (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPL Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subP AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPR Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
delZR :: UINT -> AVL e -> e -> AVL e -> AVL e
delZR :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZR Int#
p AVL e
t = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dZR (Int# -> Int#
goR Int#
p) AVL e
t
{-# INLINE dZR #-}
dZR :: UINT -> AVL e -> e -> AVL e -> AVL e
dZR :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dZR Int#
_ AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"deletePath: Element not found."
dZR Int#
p AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNL Int#
p AVL e
rl e
re AVL e
rr)
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subN AVL e
rl AVL e
rr)
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNR Int#
p AVL e
rl e
re AVL e
rr)
dZR Int#
p AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> let r' :: AVL e
r' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZL Int#
p 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'
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ' AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subZL AVL e
rl AVL e
rr)
Ordering
GT -> let r' :: AVL e
r' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZR Int#
p 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'
dZR Int#
p AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPL Int#
p AVL e
rl e
re AVL e
rr)
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subP AVL e
rl AVL e
rr)
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPR Int#
p AVL e
rl e
re AVL e
rr)
delPL :: UINT -> AVL e -> e -> AVL e -> AVL e
delPL :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPL Int#
p AVL e
t = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dPL (Int# -> Int#
goL Int#
p) AVL e
t
{-# INLINE dPL #-}
dPL :: UINT -> AVL e -> e -> AVL e -> AVL e
dPL :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dPL Int#
_ AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"delPL: Bug0"
dPL Int#
p (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNL Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subN AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNR Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
dPL Int#
p (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> let l' :: AVL e
l' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZL Int#
p 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
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP' (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subZR AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> let l' :: AVL e
l' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZR Int#
p 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
dPL Int#
p (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPL Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subP AVL e
ll AVL e
lr) e
e AVL e
r
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPR Int#
p AVL e
ll e
le AVL e
lr) e
e AVL e
r
delPR :: UINT -> AVL e -> e -> AVL e -> AVL e
delPR :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPR Int#
p AVL e
t = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dPR (Int# -> Int#
goR Int#
p) AVL e
t
{-# INLINE dPR #-}
dPR :: UINT -> AVL e -> e -> AVL e -> AVL e
dPR :: forall e. Int# -> AVL e -> e -> AVL e -> AVL e
dPR Int#
_ AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"deletePath: Element not found."
dPR Int#
p AVL e
l e
e (N AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNL Int#
p AVL e
rl e
re AVL e
rr)
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subN AVL e
rl AVL e
rr)
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delNR Int#
p AVL e
rl e
re AVL e
rr)
dPR Int#
p AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> let r' :: AVL e
r' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZL Int#
p 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'
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP' AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subZL AVL e
rl AVL e
rr)
Ordering
GT -> let r' :: AVL e
r' = Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delZR Int#
p 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'
dPR Int#
p AVL e
l e
e (P AVL e
rl e
re AVL e
rr) = case Int# -> Ordering
sel Int#
p of
Ordering
LT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPL Int#
p AVL e
rl e
re AVL e
rr)
Ordering
EQ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e (AVL e -> AVL e -> AVL e
forall e. AVL e -> AVL e -> AVL e
subP AVL e
rl AVL e
rr)
Ordering
GT -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e (Int# -> AVL e -> e -> AVL e -> AVL e
forall e. Int# -> AVL e -> e -> AVL e -> AVL e
delPR Int#
p AVL e
rl e
re AVL e
rr)
popHL :: AVL e -> UBT3(e,AVL e,UINT)
popHL :: forall e. AVL e -> (# e, AVL e, Int# #)
popHL AVL e
E = [Char] -> (# e, AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"popHL: Empty tree."
popHL (N AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLN AVL e
l e
e AVL e
r
popHL (Z AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZ AVL e
l e
e AVL e
r
popHL (P AVL e
l e
e AVL e
r) = AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLP AVL e
l e
e AVL e
r
popHLN :: AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLN :: forall e. AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLN AVL e
l e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLN_ L(2AVL e
) e
l AVL e
e r of
UBT3(e_,Int#
t,h) -> case AVL e
t of
AVL e
E -> [Char] -> (# e, AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"popHLN: Bug0"
Z AVL e
_ e
_ AVL e
_ -> UBT3(e_,t,DECINT1(h))
AVL e
_ -> UBT3(e_,t, h )
popHLZ :: AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLZ :: forall e. AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZ AVL e
l e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZ_ L(1AVL e
) e
l AVL e
e r of
UBT3(e_,Int#
t,h) -> case AVL e
t of
AVL e
E -> UBT3(AVL e
forall e. AVL e
e,E,L(0))
P AVL e
_ e
_ AVL e
_ -> [Char] -> (# e, AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"popHLZ: Bug0"
AVL e
_ -> UBT3(e_,t, h )
popHLP :: AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLP :: forall e. AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLP AVL e
l e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLP_ L(1AVL e
) e
l AVL e
e r of
UBT3(e_,Int#
t,h) -> case AVL e
t of
Z AVL e
_ e
_ AVL e
_ -> UBT3(e_,t,DECINT1(h))
P AVL e
_ e
_ AVL e
_ -> UBT3(e_,t, h )
AVL e
_ -> [Char] -> (# e, AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"popHLP: Bug0"
popHLN_ :: UINT -> AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLN_ :: forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLN_ Int#
h AVL e
E e
e AVL e
r = UBT3(AVL e
e,Int#
r,h)
popHLN_ Int#
h (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLN_ INCINT2(h) ll le lr of
UBT3(e_,l,hl) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e, Int# #) -> (# e, AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT3(e_,t,hl)
popHLN_ Int#
h (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLNZ INCINT1(h) ll le lr e r
popHLN_ Int#
h (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLP_ INCINT1(h) ll le lr of
UBT3(e_,l,hl) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLN AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e, Int# #) -> (# e, AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT3(e_,t,hl)
{-# INLINE popHLZ_ #-}
popHLZ_ :: UINT -> AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLZ_ :: forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZ_ Int#
h AVL e
E e
e AVL e
_ = UBT3(AVL e
forall e. AVL e
e,Int#
E,h)
popHLZ_ Int#
h (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZN INCINT2(h) ll le lr e r
popHLZ_ Int#
h (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZZ INCINT1(h) ll le lr e r
popHLZ_ Int#
h (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZP INCINT1(h) ll le lr e r
popHLP_ :: UINT -> AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLP_ :: forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLP_ Int#
_ AVL e
E e
_ AVL e
_ = [Char] -> (# e, AVL e, Int# #)
forall a. HasCallStack => [Char] -> a
error [Char]
"popHLP_: Bug0"
popHLP_ Int#
h (N AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLN_ INCINT2(h) ll le lr of
UBT3(e_,l,hl) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e, Int# #) -> (# e, AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT3(e_,t,hl)
popHLP_ Int#
h (Z AVL e
ll e
le AVL e
lr) e
e AVL e
r = Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLPZ INCINT1(h) ll le lr e r
popHLP_ Int#
h (P AVL e
ll e
le AVL e
lr) e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLP_ INCINT1(h) ll le lr of
UBT3(e_,l,hl) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e, Int# #) -> (# e, AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT3(e_,t,hl)
{-# INLINE popHLNZ #-}
popHLNZ :: UINT -> AVL e -> e -> AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLNZ :: forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLNZ Int#
h AVL e
E e
le AVL e
_ e
e AVL e
r = let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalN AVL e
forall e. AVL e
E e
e AVL e
r
in AVL e
t AVL e -> (# e, AVL e, Int# #) -> (# e, AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT3(le,Int#
t,h)
popHLNZ Int#
h (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZN INCINT2(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
N e
l AVL e
e r, hl)
popHLNZ Int#
h (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZZ INCINT1(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
N e
l AVL e
e r, hl)
popHLNZ Int#
h (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZP INCINT1(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
N e
l AVL e
e r, hl)
popHLZZ :: UINT -> AVL e -> e -> AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLZZ :: forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZZ Int#
h AVL e
E e
le AVL e
_ e
e AVL e
r = UBT3(leAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
forall e. AVL e
N e
E AVL e
e rInt#
, h)
popHLZZ Int#
h (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZN INCINT2(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
Z e
l AVL e
e r, hl)
popHLZZ Int#
h (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZZ INCINT1(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
Z e
l AVL e
e r, hl)
popHLZZ Int#
h (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZP INCINT1(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
Z e
l AVL e
e r, hl)
{-# INLINE popHLPZ #-}
popHLPZ :: UINT -> AVL e -> e -> AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLPZ :: forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLPZ Int#
h AVL e
E e
le AVL e
_ e
e AVL e
_ = UBT3(leAVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
forall e. AVL e
Z e
E AVL e
forall e. AVL e
e EInt#
, h)
popHLPZ Int#
h (N AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZN INCINT2(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
P e
l AVL e
e r, hl)
popHLPZ Int#
h (Z AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZZ INCINT1(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
P e
l AVL e
e r, hl)
popHLPZ Int#
h (P AVL e
lll e
lle AVL e
llr) e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZP INCINT1(h) lll lle llr le lr of
UBT3(e_,l,hl) -> UBT3(e_AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
, AVL e
P e
l AVL e
e r, hl)
popHLZN :: UINT -> AVL e -> e -> AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLZN :: forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZN Int#
h AVL e
ll e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLN_ Int#
h AVL e
ll e
le AVL e
lr of
UBT3(e_,l,hl) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e, Int# #) -> (# e, AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT3(e_,t,hl)
popHLZP :: UINT -> AVL e -> e -> AVL e -> e -> AVL e -> UBT3(e,AVL e,UINT)
popHLZP :: forall e.
Int# -> AVL e -> e -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLZP Int#
h AVL e
ll e
le AVL e
lr e
e AVL e
r = case Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
forall e. Int# -> AVL e -> e -> AVL e -> (# e, AVL e, Int# #)
popHLP_ Int#
h AVL e
ll e
le AVL e
lr of
UBT3(e_,l,hl) -> let t :: AVL e
t = AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ AVL e
l e
e AVL e
r in AVL e
t AVL e -> (# e, AVL e, Int# #) -> (# e, AVL e, Int# #)
forall a b. a -> b -> b
`seq` UBT3(e_,t,hl)
rebalN :: AVL e -> e -> AVL e -> AVL e
rebalN :: forall e. AVL e -> e -> AVL e -> AVL e
rebalN AVL e
_ e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"rebalN: Bug0"
rebalN AVL e
l e
e (N AVL e
rl 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
rl) e
re AVL e
rr
rebalN AVL e
l e
e (Z AVL e
rl e
re AVL e
rr) = 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
N AVL e
l e
e AVL e
rl) e
re AVL e
rr
rebalN AVL e
_ e
_ (P AVL e
E e
_ AVL e
_) = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"rebalN: Bug1"
rebalN AVL e
l e
e (P (N AVL e
rll e
rle AVL e
rlr) 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
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)
rebalN AVL e
l e
e (P (Z AVL e
rll e
rle AVL e
rlr) 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
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)
rebalN AVL e
l e
e (P (P AVL e
rll e
rle AVL e
rlr) 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
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)
rebalP :: AVL e -> e -> AVL e -> AVL e
rebalP :: forall e. AVL e -> e -> AVL e -> AVL e
rebalP AVL e
E e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"rebalP: Bug0"
rebalP (P AVL e
ll 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
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)
rebalP (Z AVL e
ll 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
N AVL e
ll e
le (AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
P AVL e
lr e
e AVL e
r)
rebalP (N AVL e
_ e
_ AVL e
E ) e
_ AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"rebalP: Bug1"
rebalP (N AVL e
ll e
le (P AVL e
lrl e
lre AVL e
lrr)) 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
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)
rebalP (N AVL e
ll e
le (Z AVL e
lrl e
lre AVL e
lrr)) 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
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)
rebalP (N AVL e
ll e
le (N AVL e
lrl e
lre AVL e
lrr)) 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
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)
chkLN :: AVL e -> e -> AVL e -> AVL e
chkLN :: forall e. AVL e -> e -> AVL e -> AVL e
chkLN AVL e
l e
e AVL e
r = case AVL e
l of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"chkLN: Bug0"
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
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalN 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
N AVL e
l e
e AVL e
r
chkLZ :: AVL e -> e -> AVL e -> AVL e
chkLZ :: forall e. AVL e -> e -> AVL e -> AVL e
chkLZ AVL e
l e
e AVL e
r = case AVL e
l of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"chkLZ: Bug0"
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
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
chkLP :: AVL e -> e -> AVL e -> AVL e
chkLP :: forall e. AVL e -> e -> AVL e -> AVL e
chkLP AVL e
l e
e AVL e
r = case AVL e
l of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"chkLP: Bug0"
N 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
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
P 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
chkRN :: AVL e -> e -> AVL e -> AVL e
chkRN :: forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e AVL e
r = case AVL e
r of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"chkRN: Bug0"
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
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
P 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
chkRZ :: AVL e -> e -> AVL e -> AVL e
chkRZ :: forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e AVL e
r = case AVL e
r of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"chkRZ: Bug0"
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
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
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
chkRP :: AVL e -> e -> AVL e -> AVL e
chkRP :: forall e. AVL e -> e -> AVL e -> AVL e
chkRP AVL e
l e
e AVL e
r = case AVL e
r of
AVL e
E -> [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"chkRP: Bug0"
N 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
Z AVL e
_ e
_ AVL e
_ -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalP 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
P AVL e
l e
e AVL e
r
subN :: AVL e -> AVL e -> AVL e
subN :: forall e. AVL e -> AVL e -> AVL e
subN AVL e
_ AVL e
E = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"subN: Bug0"
subN AVL e
l (N AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLN AVL e
rl e
re AVL e
rr of UBT2(e,r_) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e AVL e
r_
subN AVL e
l (Z AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLZ AVL e
rl e
re AVL e
rr of UBT2(e,r_) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN' AVL e
l e
e AVL e
r_
subN AVL e
l (P AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLP AVL e
rl e
re AVL e
rr of UBT2(e,r_) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRN AVL e
l e
e AVL e
r_
subZR :: AVL e -> AVL e -> AVL e
subZR :: forall e. AVL e -> AVL e -> AVL e
subZR AVL e
_ AVL e
E = AVL e
forall e. AVL e
E
subZR AVL e
l (N AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLN AVL e
rl e
re AVL e
rr of UBT2(e,r_) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e AVL e
r_
subZR AVL e
l (Z AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLZ AVL e
rl e
re AVL e
rr of UBT2(e,r_) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ' AVL e
l e
e AVL e
r_
subZR AVL e
l (P AVL e
rl e
re AVL e
rr) = case AVL e -> e -> AVL e -> (# e, AVL e #)
forall e. AVL e -> e -> AVL e -> (# e, AVL e #)
popLP AVL e
rl e
re AVL e
rr of UBT2(e,r_) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkRZ AVL e
l e
e AVL e
r_
subZL :: AVL e -> AVL e -> AVL e
subZL :: forall e. AVL e -> AVL e -> AVL e
subZL AVL e
E AVL e
_ = AVL e
forall e. AVL e
E
subZL (N AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
ll e
le AVL e
lr of UBT2(l_,e) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ AVL e
l_ e
e AVL e
r
subZL (Z AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRZ AVL e
ll e
le AVL e
lr of UBT2(l_,e) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ' AVL e
l_ e
e AVL e
r
subZL (P AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
ll e
le AVL e
lr of UBT2(l_,e) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLZ AVL e
l_ e
e AVL e
r
subP :: AVL e -> AVL e -> AVL e
subP :: forall e. AVL e -> AVL e -> AVL e
subP AVL e
E AVL e
_ = [Char] -> AVL e
forall a. HasCallStack => [Char] -> a
error [Char]
"subP: Bug0"
subP (N AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRN AVL e
ll e
le AVL e
lr of UBT2(l_,e) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP AVL e
l_ e
e AVL e
r
subP (Z AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRZ AVL e
ll e
le AVL e
lr of UBT2(l_,e) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP' AVL e
l_ e
e AVL e
r
subP (P AVL e
ll e
le AVL e
lr) AVL e
r = case AVL e -> e -> AVL e -> (# AVL e, e #)
forall e. AVL e -> e -> AVL e -> (# AVL e, e #)
popRP AVL e
ll e
le AVL e
lr of UBT2(l_,e) -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
chkLP AVL e
l_ e
e AVL e
r
chkLN' :: AVL e -> e -> AVL e -> AVL e
chkLN' :: forall e. AVL e -> e -> AVL e -> AVL e
chkLN' AVL e
l e
e AVL e
r = case AVL e
l of
AVL e
E -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalN 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
chkLZ' :: AVL e -> e -> AVL e -> AVL e
chkLZ' :: forall e. AVL e -> e -> AVL e -> AVL e
chkLZ' AVL e
l e
e AVL e
r = case AVL e
l of
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
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
chkLP' :: AVL e -> e -> AVL e -> AVL e
chkLP' :: forall e. AVL e -> e -> AVL e -> AVL e
chkLP' AVL e
l e
e AVL e
r = case AVL e
l of
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
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
chkRN' :: AVL e -> e -> AVL e -> AVL e
chkRN' :: forall e. AVL e -> e -> AVL e -> AVL e
chkRN' AVL e
l e
e AVL e
r = case AVL e
r of
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
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
chkRZ' :: AVL e -> e -> AVL e -> AVL e
chkRZ' :: forall e. AVL e -> e -> AVL e -> AVL e
chkRZ' AVL e
l e
e AVL e
r = case AVL e
r of
AVL 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
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
chkRP' :: AVL e -> e -> AVL e -> AVL e
chkRP' :: forall e. AVL e -> e -> AVL e -> AVL e
chkRP' AVL e
l e
e AVL e
r = case AVL e
r of
AVL e
E -> AVL e -> e -> AVL e -> AVL e
forall e. AVL e -> e -> AVL e -> AVL e
rebalP 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