noether-0.0.1: library/Noether/Algebra/Single/Semigroup.hs
module Noether.Algebra.Single.Semigroup where
import Noether.Lemmata.TypeFu
import Noether.Algebra.Single.Magma
import Noether.Algebra.Tags
data SemigroupE
= Semigroup_Magma MagmaE
| SemigroupNamed Symbol SemigroupE
class SemigroupK (op :: k) a (s :: SemigroupE)
instance MagmaK op a s => SemigroupK op a (Semigroup_Magma s)
instance (KnownSymbol sym, SemigroupK op a s) =>
SemigroupK op a (SemigroupNamed sym s)
type SemigroupC op a = SemigroupK op a (SemigroupS op a)
type family SemigroupS (op :: k) (a :: Type) = (r :: SemigroupE)