This commit is contained in:
2024-12-18 11:39:52 +00:00
parent d405747bd5
commit 4d6d255893
+25
View File
@@ -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)