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

Control.Applicative.Cancelative

Description

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

Synopsis

# Cancelative

class Alternative f => Cancelative f where Source #

A group on Applicative functors.

Cancelative functors have the following laws:

Left Cancelation
 cancel a <|> a = empty
Rigth Cancelation
 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

cancel

Methods

cancel :: f a -> f a Source #

Invert (or cancel) a Cancelative 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 = [Right (Sum {getSum = 2}),Left (Sum {getSum = 3})]}


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

#### Instances

Instances details
 Source # Instance detailsDefined in Control.Applicative.Cancelative Methods Source # Instance detailsDefined in Control.Applicative.Cancelative Methodscancel :: FA a -> FA a Source # Source # Instance detailsDefined in Control.Applicative.Cancelative Methodscancel :: FG a -> FG a Source # Cancelative (Proxy :: Type -> Type) Source # Instance detailsDefined in Control.Applicative.Cancelative Methodscancel :: Proxy a -> Proxy a Source #

## Cancelative combinators

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

Cancel a single element in a Cancelative 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}


annihalate :: (Cancelative f, Traversable t) => (a -> f a) -> t a -> f (t a) Source #

Annihalate a Traversable's worth of elements in a Cancelative functor.