group-theory-0.2.1.0: The theory of groups
Copyright (c) 2020 Emily Pillmore BSD-style Emily Pillmore , Reed Mullanix stable non-portable Safe Haskell2010

Control.Applicative.Cancellative

Description

This module contains definitions for Cancellative functors along with the relevant combinators.

Synopsis

# 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:

Left Cancellation
 cancel a <|> a = empty
Rigth Cancellation
 a <|> cancel a = empty

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.

Minimal complete definition

Nothing

Methods

cancel :: f a -> f a Source #

Invert (or cancel) a Cancellative functor, such that, if the functor is also a GroupFoldable, then gold . cancel amounts to evaluating the inverse of a word in the functor.

### Examples:

Expand
>>> let x = FreeGroup [Left (Sum (2 :: Word8)), Right (Sum 3)]
>>> cancel x
FreeGroup {runFreeGroup = [Left (Sum {getSum = 3}),Right (Sum {getSum = 2})]}


default cancel :: Group (f a) => f a -> f a Source #

#### Instances

Instances details
 Source # Instance detailsDefined in Control.Applicative.Cancellative Methods Source # Instance detailsDefined in Control.Applicative.Cancellative Methodscancel :: FA a -> FA a Source # Source # Instance detailsDefined in Control.Applicative.Cancellative Methodscancel :: FG a -> FG a Source # Source # Instance detailsDefined in Control.Applicative.Cancellative Methodscancel :: Proxy a -> Proxy a Source #

## Cancellative combinators

cancel1 :: (Group a, Cancellative f) => a -> f a -> f a Source #

Cancel a single element in a Cancellative functor.

### Examples:

Expand
>>> 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.