noether-0.0.1: library/Noether/Algebra/Single/Monoid.hs
module Noether.Algebra.Single.Monoid where
import Noether.Lemmata.TypeFu
import Noether.Algebra.Single.Neutral
import Noether.Algebra.Single.Semigroup
data MonoidE
= Monoid_Semigroup_Neutral SemigroupE NeutralE
| MonoidNamed Symbol MonoidE
class MonoidK (op :: k) a (s :: MonoidE)
instance (SemigroupK op a zs, NeutralK op a zn) =>
MonoidK op a (Monoid_Semigroup_Neutral zs zn)
instance (KnownSymbol sym, MonoidK op a s) =>
MonoidK op a (MonoidNamed sym s)
type MonoidC op a = MonoidK op a (MonoidS op a)
type family MonoidS (op :: k) (a :: Type) = (r :: MonoidE)