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
{ superTree :: !(Tree (SuperNode a))
, superProperties :: !(PropertyMap a b) }
data SuperNode a = SuperRoot | SuperNode { myRootLabel :: !a
, myParent :: !(SuperNode a)
, myLeaves :: !(M.Map a (Int, Int)) }
deriving (Read, Show, Eq, 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))