0 | module Data.Container.Additive.Object.Definition
2 | import Data.Container.Base
3 | import Data.ComMonoid
14 | record AddCont where
15 | constructor MkAddCont
17 | {auto mon : InterfaceOnPositions UC ComMonoid}
20 | (.Shp) : AddCont -> Type
21 | (.Shp) c = Shp (UC c)
24 | (.Pos) : (c : AddCont) -> c.Shp -> Type
25 | (.Pos) c = Pos (UC c)
29 | UMon : (c : AddCont) -> (s : c.Shp) -> ComMonoid (c.Pos s)
30 | UMon (MkAddCont c @{MkI @{m}}) s = m s
33 | (.Plus) : (c : AddCont) -> (s : c.Shp) -> (c.Pos s -> c.Pos s -> c.Pos s)
34 | (.Plus) c s = plus (UMon c s)
37 | (.Zero) : (c : AddCont) -> (s : c.Shp) -> c.Pos s
38 | (.Zero) c s = neutral (UMon c s)
43 | data InterfaceOnPositions : (c : AddCont) -> (i : Type -> Type) -> Type where
45 | MkI : (p : (s : c.Shp) -> i (c.Pos s)) =>
46 | InterfaceOnPositions c i
51 | data IsFlat : AddCont -> Type where
52 | MkIsFlat : (p : Type) -> (mon : ComMonoid p) => IsFlat (MkAddCont (Const p))