0 | module Data.Container.Base.InstanceInterfaces
3 | import Decidable.Equality
4 | import Data.Fin.Split
8 | import Data.Container.Base.Object.Definition
9 | import Data.Container.Base.Extension.Definition
10 | import Data.Container.Base.Properties.Definitions
11 | import Data.Container.Base.Object.Instances
12 | import Data.Container.Base.Extension.Instances
13 | import Data.Container.Base.Properties.Instances
16 | import Data.Container.Base.TreeUtils
17 | import Data.Functor.Algebra
20 | %hide Prelude.toList
31 | (0 c : Cont) -> (isFinite : IsFinite c) =>
32 | (0 a : Type) -> Num a =>
34 | algebraFinite c {isFinite = MkI p} _
35 | = MkAlgebra $
\(shp <| content) => reduce $
values @{p shp} <&> content
38 | namespace VectInstances
40 | {n : Nat} -> Eq x => Eq (Vect' n x) where
41 | v == v' = (toVect v) == (toVect v')
48 | {n : Nat} -> Num a => Algebra (Vect' n) a where
49 | reduce v = reduce (toVect v)
52 | {n : Nat} -> Traversable (Vect' n) where
53 | traverse f v = fromVect <$> traverse f (toVect v)
60 | (s : Fin (S n)) -> Vect' n a -> Vect' (finToNat s) a
61 | take s = fromVect . takeFin s . toVect
64 | (++) : {n : Nat} -> Vect' n a -> Vect' m a -> Vect' (n + m) a
65 | (++) v1 v2 = () <| \i => case splitSum i of
66 | Left i1 => index v1 i1
67 | Right i2 => index v2 i2
74 | namespace ListInstances
77 | Eq a => Eq (List' a) where
78 | l == l' = assert_total ((toList l) == (toList l'))
86 | Num a => Algebra List' a where
87 | reduce = reduce {f=List} . toList
104 | namespace BinTreeInstances
107 | Eq a => Eq (BinTree' a) where
108 | t == t' = assert_total (toBinTreeSame t == toBinTreeSame t')
117 | Num a => Algebra BinTree' a where
118 | reduce = reduce {f=BinTreeSame} . toBinTreeSame
125 | namespace BinTreeLeafInstances
128 | Eq a => Eq (BinTreeLeaf' a) where
129 | t == t' = assert_total (toBinTreeLeaf t == toBinTreeLeaf t')
138 | Num a => Algebra BinTreeLeaf' a where
139 | reduce = reduce {f=BinTreeLeaf} . toBinTreeLeaf
142 | namespace BinTreeNodeInstances
145 | Eq a => Eq (BinTreeNode' a) where
146 | t == t' = assert_total (toBinTreeNode t == toBinTreeNode t')
155 | Num a => Algebra BinTreeNode' a where
156 | reduce = reduce {f=BinTreeNode} . toBinTreeNode