semigroups-0.18.4: Anything that associates

Copyright(C) 2014-2015 Edward Kmett Eric Mertens
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityprovisional
Portabilityportable
Safe HaskellSafe
LanguageHaskell98

Data.Semigroup.Generic

Description

This module provides generic deriving tools for monoids and semigroups for product-like structures.

Synopsis

Documentation

class GSemigroup f Source #

Minimal complete definition

gmappend'

Instances

GSemigroup (V1 *) Source # 

Methods

gmappend' :: V1 * p -> V1 * p -> V1 * p

GSemigroup (U1 *) Source # 

Methods

gmappend' :: U1 * p -> U1 * p -> U1 * p

Semigroup a => GSemigroup (K1 * i a) Source # 

Methods

gmappend' :: K1 * i a p -> K1 * i a p -> K1 * i a p

(GSemigroup f, GSemigroup g) => GSemigroup ((:*:) * f g) Source # 

Methods

gmappend' :: (* :*: f) g p -> (* :*: f) g p -> (* :*: f) g p

GSemigroup f => GSemigroup (M1 * i c f) Source # 

Methods

gmappend' :: M1 * i c f p -> M1 * i c f p -> M1 * i c f p

gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a Source #

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

class GSemigroup f => GMonoid f Source #

Minimal complete definition

gmempty'

Instances

GMonoid (U1 *) Source # 

Methods

gmempty' :: U1 * p

(Semigroup a, Monoid a) => GMonoid (K1 * i a) Source # 

Methods

gmempty' :: K1 * i a p

(GMonoid f, GMonoid g) => GMonoid ((:*:) * f g) Source # 

Methods

gmempty' :: (* :*: f) g p

GMonoid f => GMonoid (M1 * i c f) Source # 

Methods

gmempty' :: M1 * i c f p

gmempty :: (Generic a, GMonoid (Rep a)) => a Source #

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