interface LSemigroup : Type -> TypeThis interface is a witness that for a
type `a` the axioms of a semigroup hold: `(<+>)` is associative.
Note: If the type is actually a monoid, use `Data.Algebra.LMonoid` instead.
0 appendAssociative : x <+> (y <+> z) = (x <+> y) <+> zCommutativeSemigroup a -> LSemigroup a0 appendAssociative : {auto __con : LSemigroup a} -> x <+> (y <+> z) = (x <+> y) <+> zinterface CommutativeSemigroup : Type -> TypeThis interface is a witness that for a
type `a` the axioms of a commutative semigroup hold:
`(<+>)` is commutative.
0 appendCommutative : x <+> y = y <+> x0 appendCommutative : {auto __con : CommutativeSemigroup a} -> x <+> y = y <+> x