Copyright | (c) 2020 Emily Pillmore |
---|---|
License | BSD-style |
Maintainer | Emily Pillmore <emilypi@cohomolo.gy>, Reed Mullanix <reedmullanix@gmail.com> |
Stability | stable |
Portability | non-portable |
Safe Haskell | Safe |
Language | Haskell2010 |
This module contains definitions for Cancellative
functors
along with the relevant combinators.
Synopsis
- class Alternative f => Cancellative f where
- cancel :: f a -> f a
- cancel1 :: (Group a, Cancellative f) => a -> f a -> f a
- annihilate :: (Cancellative f, Traversable t) => (a -> f a) -> t a -> f (t a)
Cancellative
class Alternative f => Cancellative f where Source #
A group on Applicative
functors.
Cancellative
functors have the following laws in addition to those of
Alternative
:
This is analogous to a group operation on applicative functors,
in the sense that Alternative
forms a monoid. A straight-
forward implementation exists whenever f a
forms a Group
for all a
, in which case, cancel == invert
.
Nothing
Invert (or cancel
) a Cancellative
functor, such that, if the
functor is also a GroupFoldable
, then
amounts to evaluating the inverse of a word in the functor.gold
.
cancel
Examples:
>>>
let x = FreeGroup [Left (Sum (2 :: Word8)), Right (Sum 3)]
>>>
cancel x
FreeGroup {runFreeGroup = [Left (Sum {getSum = 3}),Right (Sum {getSum = 2})]}
Instances
Cancellative combinators
cancel1 :: (Group a, Cancellative f) => a -> f a -> f a Source #
Cancel a single element in a Cancellative
functor.
Examples:
>>>
let x = FreeGroup [Left (Sum (2 :: Word8)), Right (Sum 3)]
>>>
gold x
Sum {getSum = 1}>>>
gold $ cancel1 (Sum 1) x
Sum {getSum = 0}
annihilate :: (Cancellative f, Traversable t) => (a -> f a) -> t a -> f (t a) Source #
Annihilate a Traversable
's worth of elements in a Cancellative
functor.