Add file
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
{-# LANGUAGE StrictData #-}
|
||||||
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
|
||||||
|
module Dodge.Data.MetaTree where
|
||||||
|
|
||||||
|
import Control.Lens
|
||||||
|
import Data.Tree
|
||||||
|
|
||||||
|
data MetaTree a b = MTree
|
||||||
|
{_mtLabel :: b, _mtTree :: MetaNode a b, _mtBranches :: [MetaBranch a b]}
|
||||||
|
|
||||||
|
data MetaNode a b
|
||||||
|
= NodeTree {_nodeTree :: Tree a}
|
||||||
|
| NodeMTree {_nodeMetaTree :: MetaTree a b}
|
||||||
|
|
||||||
|
data MetaBranch a b = MBranch {_mbAttach :: a -> Maybe a, _mbTree :: MetaTree a b}
|
||||||
|
|
||||||
|
newtype SelfTree a = ST {_unST :: Tree (a, Either (Tree a) (SelfTree a))}
|
||||||
|
|
||||||
|
makeLenses ''MetaTree
|
||||||
|
makeLenses ''MetaBranch
|
||||||
|
makeLenses ''MetaNode
|
||||||
|
|
||||||
|
instance Functor (MetaTree a) where
|
||||||
|
fmap f (MTree b mn bs) = MTree (f b) (mn & nodeMetaTree %~ fmap f) (map (mbTree %~ fmap f) bs)
|
||||||
Reference in New Issue
Block a user