Copyright | (c) 2015 Maciej Piróg |
---|---|
License | MIT |
Maintainer | maciej.adam.pirog@gmail.com |
Stability | experimental |
Safe Haskell | Safe |
Language | Haskell98 |
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
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.
AdjoinZero | |
|
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
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.
AdjoinLZero | |
|
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
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.
AdjoinRZero | |
|
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 |