| 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
- gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a
- gmempty :: (Generic a, GMonoid (Rep a)) => a
- newtype GenericSemigroupMonoid a = GenericSemigroupMonoid {}
- class GSemigroup f
- class GSemigroup f => GMonoid f
Generic method implementations
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))
Instances
Instances details
Instance details
Defined in Data.Semigroup.Generic
Methods
(<>) :: GenericSemigroupMonoid a -> GenericSemigroupMonoid a -> GenericSemigroupMonoid a #
sconcat :: NonEmpty (GenericSemigroupMonoid a) -> GenericSemigroupMonoid a #
stimes :: Integral b => b -> GenericSemigroupMonoid a -> GenericSemigroupMonoid a #
Instance details
Defined in Data.Semigroup.Generic
Methods
mempty :: GenericSemigroupMonoid a #
mappend :: GenericSemigroupMonoid a -> GenericSemigroupMonoid a -> GenericSemigroupMonoid a #
mconcat :: [GenericSemigroupMonoid a] -> GenericSemigroupMonoid a #
Internal classes
class GSemigroup f Source #
Minimal complete definition
gmappend'
Instances
Instances details
Instance details
Defined in Data.Semigroup.Generic
Instance details
Defined in Data.Semigroup.Generic
Instance details
Defined in Data.Semigroup.Generic
class GSemigroup f => GMonoid f Source #
Minimal complete definition
gmempty'