{-# OPTIONS_HADDOCK hide #-}
module Data.Tree.AVL.Internals.Types
(
AVL(..),
) where
data AVL e = E
| N (AVL e) e (AVL e)
| Z (AVL e) e (AVL e)
| P (AVL e) e (AVL e)
deriving(AVL e -> AVL e -> Bool
(AVL e -> AVL e -> Bool) -> (AVL e -> AVL e -> Bool) -> Eq (AVL e)
forall e. Eq e => AVL e -> AVL e -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall e. Eq e => AVL e -> AVL e -> Bool
== :: AVL e -> AVL e -> Bool
$c/= :: forall e. Eq e => AVL e -> AVL e -> Bool
/= :: AVL e -> AVL e -> Bool
Eq,Eq (AVL e)
Eq (AVL e) =>
(AVL e -> AVL e -> Ordering)
-> (AVL e -> AVL e -> Bool)
-> (AVL e -> AVL e -> Bool)
-> (AVL e -> AVL e -> Bool)
-> (AVL e -> AVL e -> Bool)
-> (AVL e -> AVL e -> AVL e)
-> (AVL e -> AVL e -> AVL e)
-> Ord (AVL e)
AVL e -> AVL e -> Bool
AVL e -> AVL e -> Ordering
AVL e -> AVL e -> AVL e
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall e. Ord e => Eq (AVL e)
forall e. Ord e => AVL e -> AVL e -> Bool
forall e. Ord e => AVL e -> AVL e -> Ordering
forall e. Ord e => AVL e -> AVL e -> AVL e
$ccompare :: forall e. Ord e => AVL e -> AVL e -> Ordering
compare :: AVL e -> AVL e -> Ordering
$c< :: forall e. Ord e => AVL e -> AVL e -> Bool
< :: AVL e -> AVL e -> Bool
$c<= :: forall e. Ord e => AVL e -> AVL e -> Bool
<= :: AVL e -> AVL e -> Bool
$c> :: forall e. Ord e => AVL e -> AVL e -> Bool
> :: AVL e -> AVL e -> Bool
$c>= :: forall e. Ord e => AVL e -> AVL e -> Bool
>= :: AVL e -> AVL e -> Bool
$cmax :: forall e. Ord e => AVL e -> AVL e -> AVL e
max :: AVL e -> AVL e -> AVL e
$cmin :: forall e. Ord e => AVL e -> AVL e -> AVL e
min :: AVL e -> AVL e -> AVL e
Ord,Int -> AVL e -> ShowS
[AVL e] -> ShowS
AVL e -> String
(Int -> AVL e -> ShowS)
-> (AVL e -> String) -> ([AVL e] -> ShowS) -> Show (AVL e)
forall e. Show e => Int -> AVL e -> ShowS
forall e. Show e => [AVL e] -> ShowS
forall e. Show e => AVL e -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall e. Show e => Int -> AVL e -> ShowS
showsPrec :: Int -> AVL e -> ShowS
$cshow :: forall e. Show e => AVL e -> String
show :: AVL e -> String
$cshowList :: forall e. Show e => [AVL e] -> ShowS
showList :: [AVL e] -> ShowS
Show,ReadPrec [AVL e]
ReadPrec (AVL e)
Int -> ReadS (AVL e)
ReadS [AVL e]
(Int -> ReadS (AVL e))
-> ReadS [AVL e]
-> ReadPrec (AVL e)
-> ReadPrec [AVL e]
-> Read (AVL e)
forall e. Read e => ReadPrec [AVL e]
forall e. Read e => ReadPrec (AVL e)
forall e. Read e => Int -> ReadS (AVL e)
forall e. Read e => ReadS [AVL e]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: forall e. Read e => Int -> ReadS (AVL e)
readsPrec :: Int -> ReadS (AVL e)
$creadList :: forall e. Read e => ReadS [AVL e]
readList :: ReadS [AVL e]
$creadPrec :: forall e. Read e => ReadPrec (AVL e)
readPrec :: ReadPrec (AVL e)
$creadListPrec :: forall e. Read e => ReadPrec [AVL e]
readListPrec :: ReadPrec [AVL e]
Read)
instance Foldable AVL where
foldMap :: forall m a. Monoid m => (a -> m) -> AVL a -> m
foldMap a -> m
_f AVL a
E = m
forall a. Monoid a => a
mempty
foldMap a -> m
f (N AVL a
l a
v AVL a
r) = (a -> m) -> AVL a -> m
forall m a. Monoid m => (a -> m) -> AVL a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> m
f AVL a
l m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` a -> m
f a
v m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` (a -> m) -> AVL a -> m
forall m a. Monoid m => (a -> m) -> AVL a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> m
f AVL a
r
foldMap a -> m
f (Z AVL a
l a
v AVL a
r) = (a -> m) -> AVL a -> m
forall m a. Monoid m => (a -> m) -> AVL a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> m
f AVL a
l m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` a -> m
f a
v m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` (a -> m) -> AVL a -> m
forall m a. Monoid m => (a -> m) -> AVL a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> m
f AVL a
r
foldMap a -> m
f (P AVL a
l a
v AVL a
r) = (a -> m) -> AVL a -> m
forall m a. Monoid m => (a -> m) -> AVL a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> m
f AVL a
l m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` a -> m
f a
v m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` (a -> m) -> AVL a -> m
forall m a. Monoid m => (a -> m) -> AVL a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> m
f AVL a
r