module UVMHS.Lib.GTree where -- import UVMHS.Core -- import UVMHS.Lib.Pretty -- -- data GTree a = GTree -- { gtreeValues ∷ 𝐼 a -- , gtreeNested ∷ 𝕊 ⇰ GTree a -- } deriving (Show) -- -- instance Null (GTree a) where -- null = GTree null null -- instance Append (GTree a) where -- GTree m₁ n₁ ⧺ GTree m₂ n₂ = GTree (m₁ ⧺ m₂) $ n₁ ⧺ n₂ -- instance Monoid (GTree a) -- -- instance Eps (GTree a) where -- eps = GTree null null -- instance Seq (GTree a) where -- GTree v₁ n₁ ▷ GTree v₂ n₂ -- | isEmpty $ list n₁ = GTree (v₁ ⧺ v₂) n₂ -- | otherwise = GTree v₁ $ assoc $ map (mapSnd (▷ GTree v₂ n₂)) $ iter n₁ -- instance Seqoid (GTree a) -- -- instance Single a (GTree a) where -- single = gtv -- -- foldGTreeWith ∷ (Monoid b) ⇒ (𝐼 a → b) → (𝕊 → b → b) → GTree a → b -- foldGTreeWith fₗ fₙ = loop -- where -- loop (GTree vs sxs) = concat -- [ fₗ vs -- , concat $ mapOn (iter sxs) $ \ (s :* xs) → -- fₙ s $ loop xs -- ] -- -- foldGTreeOn ∷ (Monoid b) ⇒ GTree a → (𝐼 a → b) → (𝕊 → b → b) → b -- foldGTreeOn = rotateR foldGTreeWith -- -- gtk ∷ 𝕊 → GTree a → GTree a -- gtk s x = GTree null $ single $ s :* x -- -- gtks ∷ 𝐿 𝕊 → GTree a → GTree a -- gtks ss x = foldrOnFrom ss x gtk -- -- gtv ∷ a → GTree a -- gtv x = GTree (single x) null -- -- instance (Pretty a) ⇒ Pretty (GTree a) where -- pretty (GTree v n) = ppVertical $ concat -- [ map pretty v -- , mapOn (iter n) $ \ (k :* v') → ppHorizontal -- [ ppFG teal $ ppBD $ ppString k -- , ppGA $ pretty v' -- ] -- ] --