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
gmappend :: (Generic a, GSemigroup (Rep a)) => a -> a -> a #
Adapter newtype
newtype GenericSemigroupMonoid 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))
Constructors
GenericSemigroupMonoid | |
Fields |
Instances
(Generic a, GSemigroup (Rep a)) => Semigroup (GenericSemigroupMonoid a) # | |
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 | |
(Generic a, GMonoid (Rep a)) => Monoid (GenericSemigroupMonoid a) # | |
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 #
Minimal complete definition
gmappend'
Instances
GSemigroup (V1 :: Type -> Type) # | |
Defined in Data.Semigroup.Generic Methods gmappend' :: V1 p -> V1 p -> V1 p | |
GSemigroup (U1 :: Type -> Type) # | |
Defined in Data.Semigroup.Generic Methods gmappend' :: U1 p -> U1 p -> U1 p | |
Semigroup a => GSemigroup (K1 i a :: Type -> Type) # | |
Defined in Data.Semigroup.Generic Methods gmappend' :: K1 i a p -> K1 i a p -> K1 i a p | |
(GSemigroup f, GSemigroup g) => GSemigroup (f :*: g) # | |
Defined in Data.Semigroup.Generic Methods gmappend' :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p | |
GSemigroup f => GSemigroup (M1 i c f) # | |
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 #
Minimal complete definition
gmempty'
Instances
GMonoid (U1 :: Type -> Type) # | |
Defined in Data.Semigroup.Generic Methods gmempty' :: U1 p | |
(Semigroup a, Monoid a) => GMonoid (K1 i a :: Type -> Type) # | |
Defined in Data.Semigroup.Generic Methods gmempty' :: K1 i a p | |
(GMonoid f, GMonoid g) => GMonoid (f :*: g) # | |
Defined in Data.Semigroup.Generic Methods gmempty' :: (f :*: g) p | |
GMonoid f => GMonoid (M1 i c f) # | |
Defined in Data.Semigroup.Generic Methods gmempty' :: M1 i c f p |