Data.Semigroup.Generic

semigroups-0.18.3: Anything that associates

Copyright | (C) 2014-2015 Edward Kmett, Eric Mertens
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | provisional
Portability | portable
Safe Haskell | Safe
Language | Haskell98

Data.Semigroup.Generic

Description

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

Synopsis

- class GSemigroup f
- gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a
- class GSemigroup f => GMonoid f
- gmempty :: (Generic a, GMonoid (Rep a)) => a

# Documentation

class GSemigroup f #

Minimal complete definition

gmappend'

Instances

GSemigroup V1 # |
Methods gmappend' :: V1 p -> V1 p -> V1 p
GSemigroup U1 # |
Methods gmappend' :: U1 p -> U1 p -> U1 p
Semigroup a => GSemigroup (K1 i a) # |
Methods gmappend' :: K1 i a p -> K1 i a p -> K1 i a p
(GSemigroup f, GSemigroup g) => GSemigroup ((:*:) f g) # |
Methods gmappend' :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p
GSemigroup f => GSemigroup (M1 i c f) # |
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 #

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 #

Minimal complete definition

gmempty'

Instances

GMonoid U1 # |
Methods gmempty' :: U1 p
(Semigroup a, Monoid a) => GMonoid (K1 i a) # |
Methods gmempty' :: K1 i a p
(GMonoid f, GMonoid g) => GMonoid ((:*:) f g) # |
Methods gmempty' :: (f :*: g) p
GMonoid f => GMonoid (M1 i c f) # |
Methods gmempty' :: M1 i c f p

gmempty :: (Generic a, GMonoid (Rep 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