-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Anything that associates -- -- In mathematics, a semigroup is an algebraic structure consisting of a -- set together with an associative binary operation. A semigroup -- generalizes a monoid in that there might not exist an identity -- element. It also (originally) generalized a group (a monoid with all -- inverses) to a type where every element did not have to have an -- inverse, thus the name semigroup. @package semigroups @version 0.20 -- | This module provides generic deriving tools for monoids and semigroups -- for product-like structures. module Data.Semigroup.Generic -- | Generically generate a Semigroup (<>) operation -- for any type implementing Generic. This operation will append -- two values by point-wise appending their component fields. It is only -- defined for product types. -- --
--   gmappend a (gmappend b c) = gmappend (gmappend a b) c
--   
gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a -- | Generically generate a Monoid mempty for any -- product-like type implementing Generic. -- -- It is only defined for product types. -- --
--   gmappend gmempty a = a = gmappend a gmempty
--   
gmempty :: (Generic a, GMonoid (Rep a)) => a -- | An adapter newtype, suitable for DerivingVia. Its -- Semigroup and Monoid instances leverage the -- Generic-based defaults defined by gmappend and -- gmempty. Here is an example of how to use it: -- --
--   {-# LANGUAGE DerivingVia #-}
--   import Data.Semigroup.Generic
--   
--   data Pair a = MkPair a a
--     deriving (Semigroup, Monoid) via (GenericSemigroupMonoid (Pair a))
--   
newtype GenericSemigroupMonoid a GenericSemigroupMonoid :: a -> GenericSemigroupMonoid a [getGenericSemigroupMonoid] :: GenericSemigroupMonoid a -> a class GSemigroup f class GSemigroup f => GMonoid f instance (GHC.Generics.Generic a, Data.Semigroup.Generic.GSemigroup (GHC.Generics.Rep a)) => GHC.Base.Semigroup (Data.Semigroup.Generic.GenericSemigroupMonoid a) instance (GHC.Generics.Generic a, Data.Semigroup.Generic.GMonoid (GHC.Generics.Rep a)) => GHC.Base.Monoid (Data.Semigroup.Generic.GenericSemigroupMonoid a) instance Data.Semigroup.Generic.GMonoid GHC.Generics.U1 instance (GHC.Base.Semigroup a, GHC.Base.Monoid a) => Data.Semigroup.Generic.GMonoid (GHC.Generics.K1 i a) instance Data.Semigroup.Generic.GMonoid f => Data.Semigroup.Generic.GMonoid (GHC.Generics.M1 i c f) instance (Data.Semigroup.Generic.GMonoid f, Data.Semigroup.Generic.GMonoid g) => Data.Semigroup.Generic.GMonoid (f GHC.Generics.:*: g) instance Data.Semigroup.Generic.GSemigroup GHC.Generics.U1 instance Data.Semigroup.Generic.GSemigroup GHC.Generics.V1 instance GHC.Base.Semigroup a => Data.Semigroup.Generic.GSemigroup (GHC.Generics.K1 i a) instance Data.Semigroup.Generic.GSemigroup f => Data.Semigroup.Generic.GSemigroup (GHC.Generics.M1 i c f) instance (Data.Semigroup.Generic.GSemigroup f, Data.Semigroup.Generic.GSemigroup g) => Data.Semigroup.Generic.GSemigroup (f GHC.Generics.:*: g)