semigroups-0.20: 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

Generic method implementations

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

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 

Adapter newtype

newtype GenericSemigroupMonoid a Source #

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))

Constructors

Instances

Instances details

Internal classes

class GSemigroup f Source #

Minimal complete definition

gmappend'

Instances

Instances details
Instance details

Defined in Data.Semigroup.Generic

Methods

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

Instance details

Defined in Data.Semigroup.Generic

Methods

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

Semigroup a => GSemigroup (K1 i a :: Type -> Type) Source #
Instance details

Defined in Data.Semigroup.Generic

Methods

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

Instance details

Defined in Data.Semigroup.Generic

Methods

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

Instance details

Defined in Data.Semigroup.Generic

Methods

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

class GSemigroup f => GMonoid f Source #

Minimal complete definition

gmempty'

Instances

Instances details
Instance details

Defined in Data.Semigroup.Generic

Methods

gmempty' :: U1 p

(Semigroup a, Monoid a) => GMonoid (K1 i a :: Type -> Type) Source #
Instance details

Defined in Data.Semigroup.Generic

Methods

gmempty' :: K1 i a p

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

Defined in Data.Semigroup.Generic

Methods

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

GMonoid f => GMonoid (M1 i c f) Source #
Instance details

Defined in Data.Semigroup.Generic

Methods

gmempty' :: M1 i c f p

AltStyle によって変換されたページ (->オリジナル) /