group-theory-0.1.0.0: The theory of groups
Copyright(c) 2020 Emily Pillmore
LicenseBSD-style
MaintainerEmily Pillmore <emilypi@cohomolo.gy>, Reed Mullanix <reedmullanix@gmail.com>
Stabilitystable
Portabilitynon-portable
Safe HaskellSafe
LanguageHaskell2010

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
Cancelative FreeGroup Source # 
Instance details

Defined in Control.Applicative.Cancelative

Methods

cancel :: FreeGroup a -> FreeGroup a Source #

Cancelative FA Source # 
Instance details

Defined in Control.Applicative.Cancelative

Methods

cancel :: FA a -> FA a Source #

Cancelative FG Source # 
Instance details

Defined in Control.Applicative.Cancelative

Methods

cancel :: FG a -> FG a Source #

Cancelative (Proxy :: Type -> Type) Source # 
Instance details

Defined in Control.Applicative.Cancelative

Methods

cancel :: 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.