module Math.TreeFun.Types where
import qualified Data.Map as M
import qualified Data.Sequence as S
import Data.Tree
data PropertySuperTree a b = PropertySuperTree
{ forall a b. PropertySuperTree a b -> Tree (SuperNode a)
superTree :: !(Tree (SuperNode a))
, forall a b. PropertySuperTree a b -> PropertyMap a b
superProperties :: !(PropertyMap a b) }
data SuperNode a = SuperRoot | SuperNode { forall a. SuperNode a -> a
myRootLabel :: !a
, forall a. SuperNode a -> SuperNode a
myParent :: !(SuperNode a)
, forall a. SuperNode a -> Map a (Int, Int)
myLeaves :: !(M.Map a (Int, Int)) }
deriving (ReadPrec [SuperNode a]
ReadPrec (SuperNode a)
Int -> ReadS (SuperNode a)
ReadS [SuperNode a]
(Int -> ReadS (SuperNode a))
-> ReadS [SuperNode a]
-> ReadPrec (SuperNode a)
-> ReadPrec [SuperNode a]
-> Read (SuperNode a)
forall a. (Read a, Ord a) => ReadPrec [SuperNode a]
forall a. (Read a, Ord a) => ReadPrec (SuperNode a)
forall a. (Read a, Ord a) => Int -> ReadS (SuperNode a)
forall a. (Read a, Ord a) => ReadS [SuperNode a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: forall a. (Read a, Ord a) => Int -> ReadS (SuperNode a)
readsPrec :: Int -> ReadS (SuperNode a)
$creadList :: forall a. (Read a, Ord a) => ReadS [SuperNode a]
readList :: ReadS [SuperNode a]
$creadPrec :: forall a. (Read a, Ord a) => ReadPrec (SuperNode a)
readPrec :: ReadPrec (SuperNode a)
$creadListPrec :: forall a. (Read a, Ord a) => ReadPrec [SuperNode a]
readListPrec :: ReadPrec [SuperNode a]
Read, Int -> SuperNode a -> ShowS
[SuperNode a] -> ShowS
SuperNode a -> String
(Int -> SuperNode a -> ShowS)
-> (SuperNode a -> String)
-> ([SuperNode a] -> ShowS)
-> Show (SuperNode a)
forall a. Show a => Int -> SuperNode a -> ShowS
forall a. Show a => [SuperNode a] -> ShowS
forall a. Show a => SuperNode a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> SuperNode a -> ShowS
showsPrec :: Int -> SuperNode a -> ShowS
$cshow :: forall a. Show a => SuperNode a -> String
show :: SuperNode a -> String
$cshowList :: forall a. Show a => [SuperNode a] -> ShowS
showList :: [SuperNode a] -> ShowS
Show, SuperNode a -> SuperNode a -> Bool
(SuperNode a -> SuperNode a -> Bool)
-> (SuperNode a -> SuperNode a -> Bool) -> Eq (SuperNode a)
forall a. Eq a => SuperNode a -> SuperNode a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => SuperNode a -> SuperNode a -> Bool
== :: SuperNode a -> SuperNode a -> Bool
$c/= :: forall a. Eq a => SuperNode a -> SuperNode a -> Bool
/= :: SuperNode a -> SuperNode a -> Bool
Eq, Eq (SuperNode a)
Eq (SuperNode a) =>
(SuperNode a -> SuperNode a -> Ordering)
-> (SuperNode a -> SuperNode a -> Bool)
-> (SuperNode a -> SuperNode a -> Bool)
-> (SuperNode a -> SuperNode a -> Bool)
-> (SuperNode a -> SuperNode a -> Bool)
-> (SuperNode a -> SuperNode a -> SuperNode a)
-> (SuperNode a -> SuperNode a -> SuperNode a)
-> Ord (SuperNode a)
SuperNode a -> SuperNode a -> Bool
SuperNode a -> SuperNode a -> Ordering
SuperNode a -> SuperNode a -> SuperNode a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (SuperNode a)
forall a. Ord a => SuperNode a -> SuperNode a -> Bool
forall a. Ord a => SuperNode a -> SuperNode a -> Ordering
forall a. Ord a => SuperNode a -> SuperNode a -> SuperNode a
$ccompare :: forall a. Ord a => SuperNode a -> SuperNode a -> Ordering
compare :: SuperNode a -> SuperNode a -> Ordering
$c< :: forall a. Ord a => SuperNode a -> SuperNode a -> Bool
< :: SuperNode a -> SuperNode a -> Bool
$c<= :: forall a. Ord a => SuperNode a -> SuperNode a -> Bool
<= :: SuperNode a -> SuperNode a -> Bool
$c> :: forall a. Ord a => SuperNode a -> SuperNode a -> Bool
> :: SuperNode a -> SuperNode a -> Bool
$c>= :: forall a. Ord a => SuperNode a -> SuperNode a -> Bool
>= :: SuperNode a -> SuperNode a -> Bool
$cmax :: forall a. Ord a => SuperNode a -> SuperNode a -> SuperNode a
max :: SuperNode a -> SuperNode a -> SuperNode a
$cmin :: forall a. Ord a => SuperNode a -> SuperNode a -> SuperNode a
min :: SuperNode a -> SuperNode a -> SuperNode a
Ord)
type Height = Int
type DistanceMap a = M.Map a (M.Map Int (S.Seq a))
type PropertyMap a b = M.Map a (S.Seq b)
type MaybePropertyMap a b = M.Map a (Maybe (S.Seq b))