0 | module Data.Container.Applicative.Concrete.Instances
2 | import Data.Container.Base
3 | import Data.Container.Applicative.Object.Instances
4 | import Data.Container.Applicative.Extension.Instances
5 | import Data.Container.Applicative.TreeUtils
8 | fromRoseTreeSame : RoseTreeSame a -> RoseTree' a
9 | fromRoseTreeSame (Leaf a) = LeafS <| \_ => a
10 | fromRoseTreeSame (Node a rts) =
11 | let t = fromRoseTreeSame <$> fromList rts
12 | in NodeS (shapeExt <$> t) <| \case
15 | let rw1 : (shapeExt t = shapeExt (shapeExt <$> t)) := sym (mapShapeExt t)
16 | rw2 : (shapeExt (index t (rewrite sym (mapShapeExt {f=shapeExt} t) in ps)) = index (shapeExt <$> t) ps) := mapIndexCont {c=List} {f=shapeExt} t ps
18 | (index t (rewrite rw1 in ps))
19 | (rewrite rw2 in posSt)
24 | toRoseTreeSame : RoseTree' a -> RoseTreeSame a
25 | toRoseTreeSame (LeafS <| contentAt) = Leaf (contentAt AtLeaf)
26 | toRoseTreeSame (NodeS (len <| content) <| contentAt)
27 | = Node (contentAt AtNode)
28 | (toList $
toRoseTreeSame
29 | <$> (\i => content i <| contentAt . SubTree i)
34 | FromConcrete RoseTree where
35 | concreteType = RoseTreeSame
36 | concreteFunctor = %search
37 | fromConcreteTy = fromRoseTreeSame
38 | toConcreteTy = toRoseTreeSame