record ComMonoid : Type -> TypeCommutative monoid
Not encoding the property of commutativity here
MkComMonoid : (a -> a -> a) -> a -> ComMonoid a.plus : ComMonoid a -> a -> a -> aplus : ComMonoid a -> a -> a -> a.neutral : ComMonoid a -> aneutral : ComMonoid a -> adoubleIsMonoid : ComMonoid DoubleunitIsMonoid : ComMonoid ()numIsMonoid : Num a => ComMonoid alistIsMonoid : ComMonoid (List a)pairIsMonoid : ComMonoid a => ComMonoid b => ComMonoid (a, b)sum : ComMonoid a => List a -> aComMonoid : TypeSame as ComMonoid, but without exposing the underlying carrier in the type
record ComMonoidHomo : ComMonoid -> ComMonoid -> TypeMkComMonoidHomo : (underlyingMap : (c .fst -> d .fst)) -> ((x : c .fst) -> (y : c .fst) -> underlyingMap ((c .snd) .plus x y) = (d .snd) .plus (underlyingMap x) (underlyingMap y)) -> underlyingMap ((c .snd) .neutral) = (d .snd) .neutral -> ComMonoidHomo c d.neutralPreserve : ({rec:0} : ComMonoidHomo c d) -> underlyingMap {rec:0} ((c .snd) .neutral) = (d .snd) .neutral.plusPreserve : ({rec:0} : ComMonoidHomo c d) -> (x : c .fst) -> (y : c .fst) -> underlyingMap {rec:0} ((c .snd) .plus x y) = (d .snd) .plus (underlyingMap {rec:0} x) (underlyingMap {rec:0} y).underlyingMap : ComMonoidHomo c d -> c .fst -> d .fst.underlyingMap : ComMonoidHomo c d -> c .fst -> d .fstunderlyingMap : ComMonoidHomo c d -> c .fst -> d .fst.plusPreserve : ({rec:0} : ComMonoidHomo c d) -> (x : c .fst) -> (y : c .fst) -> underlyingMap {rec:0} ((c .snd) .plus x y) = (d .snd) .plus (underlyingMap {rec:0} x) (underlyingMap {rec:0} y)plusPreserve : ({rec:0} : ComMonoidHomo c d) -> (x : c .fst) -> (y : c .fst) -> underlyingMap {rec:0} ((c .snd) .plus x y) = (d .snd) .plus (underlyingMap {rec:0} x) (underlyingMap {rec:0} y).neutralPreserve : ({rec:0} : ComMonoidHomo c d) -> underlyingMap {rec:0} ((c .snd) .neutral) = (d .snd) .neutralneutralPreserve : ({rec:0} : ComMonoidHomo c d) -> underlyingMap {rec:0} ((c .snd) .neutral) = (d .snd) .neutral