generic-deriving-1.8.0: Generic programming library for generalised deriving.

Safe HaskellSafe-Inferred
LanguageHaskell98

Generics.Deriving.Monoid

Contents

Description

This module provides two main features:

  1. GMonoid, a generic version of the Monoid type class, including instances of the types from Data.Monoid

    1. Default generic definitions for the Monoid methods mempty and mappend

The generic defaults only work for types without alternatives (i.e. they have only one constructor). We cannot in general know how to deal with different constructors.

Synopsis

GMonoid type class

class GMonoid a where Source

Minimal complete definition

Nothing

Methods

gmempty :: a Source

Generic mempty

gmappend :: a -> a -> a Source

Generic mappend

gmconcat :: [a] -> a Source

Generic mconcat

Instances

GMonoid Ordering 
GMonoid () 
GMonoid All 
GMonoid Any 
GMonoid [a] 
GMonoid a => GMonoid (Dual a) 
GMonoid (Endo a) 
Num a => GMonoid (Sum a) 
Num a => GMonoid (Product a) 
GMonoid (First a) 
GMonoid (Last a) 
GMonoid a => GMonoid (Maybe a) 
GMonoid b => GMonoid (a -> b) 
(GMonoid a, GMonoid b) => GMonoid (a, b) 
(GMonoid a, GMonoid b, GMonoid c) => GMonoid (a, b, c) 
(GMonoid a, GMonoid b, GMonoid c, GMonoid d) => GMonoid (a, b, c, d) 
(GMonoid a, GMonoid b, GMonoid c, GMonoid d, GMonoid e) => GMonoid (a, b, c, d, e) 
(GMonoid a, GMonoid b, GMonoid c, GMonoid d, GMonoid e, GMonoid f) => GMonoid (a, b, c, d, e, f) 
(GMonoid a, GMonoid b, GMonoid c, GMonoid d, GMonoid e, GMonoid f, GMonoid g) => GMonoid (a, b, c, d, e, f, g) 
(GMonoid a, GMonoid b, GMonoid c, GMonoid d, GMonoid e, GMonoid f, GMonoid g, GMonoid h) => GMonoid (a, b, c, d, e, f, g, h) 

Default definitions

GMonoid

gmemptydefault :: (Generic a, GMonoid' (Rep a)) => a Source

gmappenddefault :: (Generic a, GMonoid' (Rep a)) => a -> a -> a Source

Monoid

These functions can be used in a Monoid instance. For example:

-- LANGUAGE DeriveGeneric

import Generics.Deriving.Base (Generic)
import Generics.Deriving.Monoid

data T a = C a (Maybe a) deriving Generic

instance Monoid a => Monoid (T a) where
  mempty  = memptydefault
  mappend = mappenddefault

memptydefault :: (Generic a, Monoid' (Rep a)) => a Source

mappenddefault :: (Generic a, Monoid' (Rep a)) => a -> a -> a Source

The Monoid module

This is exported for convenient access to the various wrapper types.