Copyright | (c) 2015 Maciej Piróg |
---|---|
License | MIT |
Maintainer | maciej.adam.pirog@gmail.com |
Stability | experimental |
Safe Haskell | Safe |
Language | Haskell98 |
Data.Monoid.Zero
Description
Typeclasses for monoids with (left, right, or "two-sided") zero elements (aka absorbing elements) and their free implementations. Just like monoids are related to backtracking computations, right zero monoids are related to backtracking computation with Prolog's cut operator (see the module Data.List.Cut).
- class Monoid m => MonoidZero m where
- zero :: m
- newtype AdjoinZero m = AdjoinZero {
- adjoinZero :: Maybe m
- class Monoid m => MonoidLZero m where
- lzero :: m
- newtype AdjoinLZero m = AdjoinLZero {
- unAdjoinLZero :: (Bool, m)
- class Monoid m => MonoidRZero m where
- rzero :: m
- newtype AdjoinRZero m = AdjoinRZero {
- unAdjoinRZero :: (m, Bool)
Zero monoids
class Monoid m => MonoidZero m where Source
Instances
MonoidZero () Source | |
MonoidZero All Source | |
MonoidZero Any Source | |
Num n => MonoidZero (Product n) Source | |
Monoid m => MonoidZero (AdjoinZero m) Source | |
(MonoidZero a, MonoidZero b) => MonoidZero (a, b) Source | |
(MonoidZero a, MonoidZero b, MonoidZero c) => MonoidZero (a, b, c) Source | |
(MonoidZero a, MonoidZero b, MonoidZero c, MonoidZero d) => MonoidZero (a, b, c, d) Source | |
(MonoidZero a, MonoidZero b, MonoidZero c, MonoidZero d, MonoidZero e) => MonoidZero (a, b, c, d, e) Source |
newtype AdjoinZero m Source
A zero monoid freely generated by a monoid.
Constructors
AdjoinZero | |
Fields
|
Instances
Functor AdjoinZero Source | |
Foldable AdjoinZero Source | |
Traversable AdjoinZero Source | |
Eq m => Eq (AdjoinZero m) Source | |
Ord m => Ord (AdjoinZero m) Source | |
Show m => Show (AdjoinZero m) Source | |
Monoid m => Monoid (AdjoinZero m) Source | |
Monoid m => MonoidRZero (AdjoinZero m) Source | |
Monoid m => MonoidLZero (AdjoinZero m) Source | |
Monoid m => MonoidZero (AdjoinZero m) Source |
Left zero monoids
class Monoid m => MonoidLZero m where Source
Class of left zero monoids. Instances should satisfy:
mappend
m lzero = lzero
Instances
MonoidLZero () Source | |
MonoidLZero All Source | |
MonoidLZero Any Source | |
Num n => MonoidLZero (Product n) Source | |
Monoid m => MonoidLZero (AdjoinLZero m) Source | |
Monoid m => MonoidLZero (AdjoinZero m) Source | |
(MonoidLZero a, MonoidLZero b) => MonoidLZero (a, b) Source | |
(MonoidLZero a, MonoidLZero b, MonoidLZero c) => MonoidLZero (a, b, c) Source | |
(MonoidLZero a, MonoidLZero b, MonoidLZero c, MonoidLZero d) => MonoidLZero (a, b, c, d) Source | |
(MonoidLZero a, MonoidLZero b, MonoidLZero c, MonoidLZero d, MonoidLZero e) => MonoidLZero (a, b, c, d, e) Source |
newtype AdjoinLZero m Source
A left zero monoid freely generated by a monoid.
Constructors
AdjoinLZero | |
Fields
|
Instances
Functor AdjoinLZero Source | |
Foldable AdjoinLZero Source | |
Traversable AdjoinLZero Source | |
Eq m => Eq (AdjoinLZero m) Source | |
Ord m => Ord (AdjoinLZero m) Source | |
Show m => Show (AdjoinLZero m) Source | |
Monoid m => Monoid (AdjoinLZero m) Source | |
Monoid m => MonoidLZero (AdjoinLZero m) Source |
Right zero monoids
class Monoid m => MonoidRZero m where Source
Class of right zero monoids. Instances should satisfy:
mappend
rzero m = rzero
Instances
MonoidRZero () Source | |
MonoidRZero All Source | |
MonoidRZero Any Source | |
Num n => MonoidRZero (Product n) Source | |
Monoid m => MonoidRZero (AdjoinRZero m) Source | |
Monoid m => MonoidRZero (AdjoinZero m) Source | |
(MonoidRZero a, MonoidRZero b) => MonoidRZero (a, b) Source | |
(Functor m, Monad m) => MonoidRZero (CutListT m a) Source | |
(MonoidRZero a, MonoidRZero b, MonoidRZero c) => MonoidRZero (a, b, c) Source | |
(MonoidRZero a, MonoidRZero b, MonoidRZero c, MonoidRZero d) => MonoidRZero (a, b, c, d) Source | |
(MonoidRZero a, MonoidRZero b, MonoidRZero c, MonoidRZero d, MonoidRZero e) => MonoidRZero (a, b, c, d, e) Source |
newtype AdjoinRZero m Source
A right zero monoid freely generated by a monoid.
Constructors
AdjoinRZero | |
Fields
|
Instances
Functor AdjoinRZero Source | |
Foldable AdjoinRZero Source | |
Traversable AdjoinRZero Source | |
Eq m => Eq (AdjoinRZero m) Source | |
Ord m => Ord (AdjoinRZero m) Source | |
Show m => Show (AdjoinRZero m) Source | |
Monoid m => Monoid (AdjoinRZero m) Source | |
Monoid m => MonoidRZero (AdjoinRZero m) Source |