lr-acts-0.0.1: Left and right actions, semidirect products and torsors
Copyright(c) Alice Rixte 2024
LicenseBSD 3
Maintaineralice.rixte@u-bordeaux.fr
Stabilityunstable
Portabilitynon-portable (GHC extensions)
Safe HaskellNone
LanguageHaskell2010

Data.Act.Act

Description

Usage

For both LAct and RAct, the acting type is the second parameter. This is a bit counter intuitive when using LAct, but it allows to use the DerivingVia mechanism to derive instances of LAct and RAct for newtypes that wrap the acting type. For example, you can use ActSelf' as follow to derive instances for LAct and RAct :

{-# LANGUAGE DerivingVia #-}

import Data.Act
import Data.Semigroup

newtype Seconds = Seconds Float
newtype Duration = Duration Seconds
  deriving (Semigroup, Monoid) via (Sum Float)

  deriving (LAct Seconds, RAct Seconds) via (ActSelf' (Sum Float))
  -- derives LAct Second  Duration

  deriving (LAct [Seconds], RAct [Seconds]) via (ActMap (ActSelf' (Sum Float)))
   -- derives LAct [Second] Duration

newtype Durations = Durations [Duration]
  deriving (LAct Seconds, RAct Seconds) via (ActFold [Duration])
  -- derives LAct Second Durations
>>> Duration (Seconds 1) <>$ (Seconds 2)
Seconds 3.0
>>> Duration 2 <>$ Seconds 3
Seconds 5.0
>>> Duration 2 <>$ [Seconds 3, Seconds 4]
[Seconds 5.0,Seconds 6.0]
>>> [Duration 2, Duration 3] <>$ Seconds 4
[Seconds 5.0,Seconds 6.0]
>>> Durations [Duration 2, Duration 3] <>$ Seconds 4
Seconds 9.0
Synopsis

Left actions

class LAct x s where Source #

A left action of a set s on another set x is a function that maps elements of s to functions on x.

There are no additional laws for this class to satisfy.

One example of useful set action that is not a semigroup action is declared in this file :

 instance (LAct x s, LAct x t) => LAct x (Either s t) where
   Left  s <>$ x = s <>$ x
   Right s <>$ x = s <>$ x

This is often useful when dealing with free monoids :

>>> ActFold [Right (Product (2 :: Int)) , Left (Sum (1 :: Int))] <>$ (2 :: Int)
6
>>> (2 :: Int) $<> ActFold [Right (Product (2 :: Int)) , Left (Sum (1 :: Int))]
5

The order LAct's arguments is counter intuitive : even though we write left actions as s <>$ x, we declare the constraint as LAct x s. The reason for this is to be able to derive instances of LAct while driving the instances by the acting type.

Instances of LAct are driven by the second parameter (the acting type). Concretely, this means you should never write instances of the form

instance LAct SomeType s

where s is a type variable.

Minimal complete definition

lact | (<>$)

Methods

lact :: s -> x -> x infixr 5 Source #

Lifts an element of the set s into a function on the set x

(<>$) :: s -> x -> x infixr 5 Source #

Infix synonym or lact

The acting part is on the right of the operator (symbolized by <>) and the actee on the right (symbolized by $), hence the notation <>$

Instances

Instances details
LAct () s Source #

Action by morphism of semigroups (resp. monoids) when Semigroup s (resp. Monoid s)

Instance details

Defined in Data.Act.Act

Methods

lact :: s -> () -> () Source #

(<>$) :: s -> () -> () Source #

LAct Bool All Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: All -> Bool -> Bool Source #

(<>$) :: All -> Bool -> Bool Source #

LAct Bool Any Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: Any -> Bool -> Bool Source #

(<>$) :: Any -> Bool -> Bool Source #

LAct x () Source #

Action by morphism of monoids

Instance details

Defined in Data.Act.Act

Methods

lact :: () -> x -> x Source #

(<>$) :: () -> x -> x Source #

Semigroup s => LAct s (ActSelf s) Source #

Semigroup action (monoid action when Monoid s)

Instance details

Defined in Data.Act.Act

Methods

lact :: ActSelf s -> s -> s Source #

(<>$) :: ActSelf s -> s -> s Source #

LAct x s => LAct x (Identity s) Source #

Preserves action properties of LAct x s.

Instance details

Defined in Data.Act.Act

Methods

lact :: Identity s -> x -> x Source #

(<>$) :: Identity s -> x -> x Source #

LAct x (First x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: First x -> x -> x Source #

(<>$) :: First x -> x -> x Source #

LAct x (First x) Source #

Semigroup action

Instance details

Defined in Data.Act.Act

Methods

lact :: First x -> x -> x Source #

(<>$) :: First x -> x -> x Source #

RAct x s => LAct x (Dual s) Source #

Preserves action properties of LAct x s.

Instance details

Defined in Data.Act.Act

Methods

lact :: Dual s -> x -> x Source #

(<>$) :: Dual s -> x -> x Source #

LAct x (Endo x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: Endo x -> x -> x Source #

(<>$) :: Endo x -> x -> x Source #

Num x => LAct x (Product x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: Product x -> x -> x Source #

(<>$) :: Product x -> x -> x Source #

Num x => LAct x (Sum x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: Sum x -> x -> x Source #

(<>$) :: Sum x -> x -> x Source #

(Foldable f, LAct x s) => LAct x (ActFold (f s)) Source #

When used with lists [], this is a monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: ActFold (f s) -> x -> x Source #

(<>$) :: ActFold (f s) -> x -> x Source #

(Foldable f, LAct x s) => LAct x (ActFold' (f s)) Source #

When used with lists [], this is a monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: ActFold' (f s) -> x -> x Source #

(<>$) :: ActFold' (f s) -> x -> x Source #

(Semigroup s, Coercible x s) => LAct x (ActSelf' s) Source #

Semigroup action (monoid action when Monoid s)

Instance details

Defined in Data.Act.Act

Methods

lact :: ActSelf' s -> x -> x Source #

(<>$) :: ActSelf' s -> x -> x Source #

LAct x (ActTrivial s) Source #

Action by morphism of monoids when Monoid s and Monoid x

Instance details

Defined in Data.Act.Act

Methods

lact :: ActTrivial s -> x -> x Source #

(<>$) :: ActTrivial s -> x -> x Source #

LAct x s => LAct x (Maybe s) Source #

Monoid action when LAct x s is a semigroup action.

Instance details

Defined in Data.Act.Act

Methods

lact :: Maybe s -> x -> x Source #

(<>$) :: Maybe s -> x -> x Source #

(LAct x s, LAct x t) => LAct x (Either s t) Source #

No additionnal properties. In particular this is _not_ a semigroup action.

Instance details

Defined in Data.Act.Act

Methods

lact :: Either s t -> x -> x Source #

(<>$) :: Either s t -> x -> x Source #

LAct x s => LAct (Identity x) (Identity s) Source #

Preserves action properties of LAct x s.

Instance details

Defined in Data.Act.Act

Num x => LAct (Product x) (Product x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: Product x -> Product x -> Product x Source #

(<>$) :: Product x -> Product x -> Product x Source #

Num x => LAct (Sum x) (Product x) Source #

Action by morphism of monoids

Instance details

Defined in Data.Act.Act

Methods

lact :: Product x -> Sum x -> Sum x Source #

(<>$) :: Product x -> Sum x -> Sum x Source #

Num x => LAct (Sum x) (Sum x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: Sum x -> Sum x -> Sum x Source #

(<>$) :: Sum x -> Sum x -> Sum x Source #

(LAct x s, Functor f) => LAct (f x) (ActMap s) Source #

Preserves the semigroup (resp. monoid) property of LAct x s, but not the morphism properties, which depend on potential Semigroup (resp. Monoid) instances of f x

Instance details

Defined in Data.Act.Act

Methods

lact :: ActMap s -> f x -> f x Source #

(<>$) :: ActMap s -> f x -> f x Source #

(LAct x1 s1, LAct x2 s2) => LAct (x1, x2) (s1, s2) Source #

Same action propety as the weaker properties of (LAct x1 s1, LAct x2 s2)

Instance details

Defined in Data.Act.Act

Methods

lact :: (s1, s2) -> (x1, x2) -> (x1, x2) Source #

(<>$) :: (s1, s2) -> (x1, x2) -> (x1, x2) Source #

class (LAct x s, Semigroup s) => LActSg x s Source #

A left semigroup action

Instances must satisfy the following law :

 (s <> t) <>$ x == s <>$ (t <>$ x)

Instances

Instances details
Semigroup s => LActSg () s Source # 
Instance details

Defined in Data.Act.Act

LActSg Bool All Source # 
Instance details

Defined in Data.Act.Act

LActSg Bool Any Source # 
Instance details

Defined in Data.Act.Act

LActSg x () Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => LActSg s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

LActSg x s => LActSg x (Identity s) Source # 
Instance details

Defined in Data.Act.Act

LActSg x (First x) Source # 
Instance details

Defined in Data.Act.Act

LActSg x (First x) Source # 
Instance details

Defined in Data.Act.Act

RActSg x s => LActSg x (Dual s) Source # 
Instance details

Defined in Data.Act.Act

LActSg x (Endo x) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActSg x (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActSg x (Sum x) Source # 
Instance details

Defined in Data.Act.Act

LAct x s => LActSg x (ActFold [s]) Source # 
Instance details

Defined in Data.Act.Act

LAct x s => LActSg x (ActFold' [s]) Source # 
Instance details

Defined in Data.Act.Act

(Coercible x s, Semigroup s) => LActSg x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => LActSg x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

LActSg x s => LActSg x (Maybe s) Source # 
Instance details

Defined in Data.Act.Act

LActSg x s => LActSg (Identity x) (Identity s) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActSg (Product x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActSg (Sum x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActSg (Sum x) (Sum x) Source # 
Instance details

Defined in Data.Act.Act

(LActSg x s, Functor f) => LActSg (f x) (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(LActSg x1 s1, LActSg x2 s2) => LActSg (x1, x2) (s1, s2) Source # 
Instance details

Defined in Data.Act.Act

class (LActSg x s, Monoid s) => LActMn x s Source #

A left monoid action, also called a left unitary action.

In addition to the laws of LActSg, instances must satisfy the following law :

 mempty <>$ x == x

Instances

Instances details
Monoid s => LActMn () s Source # 
Instance details

Defined in Data.Act.Act

LActMn Bool All Source # 
Instance details

Defined in Data.Act.Act

LActMn Bool Any Source # 
Instance details

Defined in Data.Act.Act

LActMn x () Source # 
Instance details

Defined in Data.Act.Act

Monoid s => LActMn s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

LActMn x s => LActMn x (Identity s) Source # 
Instance details

Defined in Data.Act.Act

LActMn x (First x) Source # 
Instance details

Defined in Data.Act.Act

RActMn x s => LActMn x (Dual s) Source # 
Instance details

Defined in Data.Act.Act

LActMn x (Endo x) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActMn x (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActMn x (Sum x) Source # 
Instance details

Defined in Data.Act.Act

(Coercible x s, Monoid s) => LActMn x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Act

Monoid s => LActMn x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

LActSg x s => LActMn x (Maybe s) Source # 
Instance details

Defined in Data.Act.Act

LActMn x s => LActMn (Identity x) (Identity s) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActMn (Product x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActMn (Sum x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActMn (Sum x) (Sum x) Source # 
Instance details

Defined in Data.Act.Act

(LActMn x s, Functor f) => LActMn (f x) (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(LActMn x1 s1, LActMn x2 s2) => LActMn (x1, x2) (s1, s2) Source # 
Instance details

Defined in Data.Act.Act

type LActGp x s = (LActMn x s, Group s) Source #

A left action of groups. No additional laws are needed.

class (LAct x s, Semigroup x) => LActDistrib x s Source #

A left distributive action

Instances must satisfy the following law :

 s <>$ (x <> y) == (s <>$ x) <> (s <>$ y)

Instances

Instances details
LActDistrib () s Source # 
Instance details

Defined in Data.Act.Act

Semigroup x => LActDistrib x () Source # 
Instance details

Defined in Data.Act.Act

LActDistrib x s => LActDistrib x (Identity s) Source # 
Instance details

Defined in Data.Act.Act

RActDistrib x s => LActDistrib x (Dual s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup x => LActDistrib x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

LActDistrib x s => LActDistrib (Identity x) (Identity s) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActDistrib (Sum x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

LAct x s => LActDistrib [x] (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(LActDistrib x1 s1, LActDistrib x2 s2) => LActDistrib (x1, x2) (s1, s2) Source # 
Instance details

Defined in Data.Act.Act

type LActSgMorph x s = (LActSg x s, LActDistrib x s) Source #

A left action by morphism of semigroups

Whenever the constaints LActSg x s and LActDistrib x s are satisfied, (s <>$) is a morphism of semigroups for any s.

class (LAct x s, Monoid x) => LActNeutral x s Source #

A left action on a monoid that preserves its neutral element.

Instances must satisfy the following law :

 s <>$ mempty == mempty

Instances

Instances details
LActNeutral () s Source # 
Instance details

Defined in Data.Act.Act

Monoid x => LActNeutral x () Source # 
Instance details

Defined in Data.Act.Act

LActNeutral x s => LActNeutral x (Identity s) Source # 
Instance details

Defined in Data.Act.Act

RActNeutral x s => LActNeutral x (Dual s) Source # 
Instance details

Defined in Data.Act.Act

Monoid x => LActNeutral x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

LActNeutral x s => LActNeutral (Identity x) (Identity s) Source # 
Instance details

Defined in Data.Act.Act

Num x => LActNeutral (Sum x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

LAct x s => LActNeutral [x] (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(LActNeutral x1 s1, LActNeutral x2 s2) => LActNeutral (x1, x2) (s1, s2) Source # 
Instance details

Defined in Data.Act.Act

type LActMnMorph x s = (LActMn x s, LActSgMorph x s, LActNeutral x s) Source #

A left action by morphism of monoids i.e. such that (s <>$) is a morphism of monoids.

This is equivalent to satisfy the three following properties :

  1. left action by morphism of semigroups (i.e. LActSgMorph x s)
  2. left monoid action (i.e. LActMn x s)
  3. preseving neutral element (i.e. LActNeutral x s)

Right actions

class RAct x s where Source #

A right action of a set s on another set x.

There are no additional laws for this class to satisfy.

Minimal complete definition

ract | ($<>)

Methods

ract :: x -> s -> x infixl 5 Source #

Act on the right of some element of x

($<>) :: x -> s -> x infixl 5 Source #

Infix synonym or ract

The acting part is on the right of the operator (symbolized by <>) and the actee on the left (symbolized by $), hence the notation $<>.

Instances

Instances details
RAct () s Source #

Action by morphism of semigroups (resp. monoids) when Semigroup s (resp. Monoid s)

Instance details

Defined in Data.Act.Act

Methods

ract :: () -> s -> () Source #

($<>) :: () -> s -> () Source #

RAct Bool All Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: Bool -> All -> Bool Source #

($<>) :: Bool -> All -> Bool Source #

RAct Bool Any Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: Bool -> Any -> Bool Source #

($<>) :: Bool -> Any -> Bool Source #

RAct x () Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> () -> x Source #

($<>) :: x -> () -> x Source #

Semigroup s => RAct s (ActSelf s) Source #

Semigroup action (monoid action when Monoid s)

Instance details

Defined in Data.Act.Act

Methods

ract :: s -> ActSelf s -> s Source #

($<>) :: s -> ActSelf s -> s Source #

RAct x s => RAct x (Identity s) Source #

Preserves action properties of RAct x s.

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> Identity s -> x Source #

($<>) :: x -> Identity s -> x Source #

RAct x (Last x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> Last x -> x Source #

($<>) :: x -> Last x -> x Source #

RAct x (Last x) Source #

Semigroup action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> Last x -> x Source #

($<>) :: x -> Last x -> x Source #

LAct x s => RAct x (Dual s) Source #

Preserves action properties of LAct x s.

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> Dual s -> x Source #

($<>) :: x -> Dual s -> x Source #

Num x => RAct x (Product x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> Product x -> x Source #

($<>) :: x -> Product x -> x Source #

Num x => RAct x (Sum x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> Sum x -> x Source #

($<>) :: x -> Sum x -> x Source #

(Foldable f, RAct x s) => RAct x (ActFold (f s)) Source #

When used with lists [], this is a monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> ActFold (f s) -> x Source #

($<>) :: x -> ActFold (f s) -> x Source #

(Foldable f, RAct x s) => RAct x (ActFold' (f s)) Source #

When used with lists [], this is a monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> ActFold' (f s) -> x Source #

($<>) :: x -> ActFold' (f s) -> x Source #

(Semigroup s, Coercible x s) => RAct x (ActSelf' s) Source #

Semigroup action (monoid action when Monoid s)

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> ActSelf' s -> x Source #

($<>) :: x -> ActSelf' s -> x Source #

RAct x (ActTrivial s) Source #

Action by morphism of monoids when Monoid s and Monoid x

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> ActTrivial s -> x Source #

($<>) :: x -> ActTrivial s -> x Source #

RAct x s => RAct x (Maybe s) Source #

Monoid action when LAct x s is a semigroup action.

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> Maybe s -> x Source #

($<>) :: x -> Maybe s -> x Source #

(RAct x s, RAct x t) => RAct x (Either s t) Source #

No additionnal properties. In particular this is _not_ a semigroup action.

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> Either s t -> x Source #

($<>) :: x -> Either s t -> x Source #

RAct x s => RAct (Identity x) (Identity s) Source #

Preserves action properties of LAct x s.

Instance details

Defined in Data.Act.Act

Num x => RAct (Product x) (Product x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: Product x -> Product x -> Product x Source #

($<>) :: Product x -> Product x -> Product x Source #

Num x => RAct (Sum x) (Product x) Source #

Action by morphism of monoids

Instance details

Defined in Data.Act.Act

Methods

ract :: Sum x -> Product x -> Sum x Source #

($<>) :: Sum x -> Product x -> Sum x Source #

Num x => RAct (Sum x) (Sum x) Source #

Monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: Sum x -> Sum x -> Sum x Source #

($<>) :: Sum x -> Sum x -> Sum x Source #

(RAct x s, Functor f) => RAct (f x) (ActMap s) Source #

Preserves the semigroup (resp. monoid) property of LAct x s, but not the morphism properties, which depend on potential Semigroup (resp. Monoid) instances of f x. When $f = []@, this is an action by morphism of monoids.

Instance details

Defined in Data.Act.Act

Methods

ract :: f x -> ActMap s -> f x Source #

($<>) :: f x -> ActMap s -> f x Source #

(RAct x1 s1, RAct x2 s2) => RAct (x1, x2) (s1, s2) Source #

Same action propety as the weaker properties of (LAct x1 s1, LAct x2 s2)

Instance details

Defined in Data.Act.Act

Methods

ract :: (x1, x2) -> (s1, s2) -> (x1, x2) Source #

($<>) :: (x1, x2) -> (s1, s2) -> (x1, x2) Source #

class (RAct x s, Semigroup s) => RActSg x s Source #

A right semigroup action

Instances must satisfy the following law :

 x $<> (s <> t) == (x $<> s) $<> t

Instances

Instances details
Semigroup s => RActSg () s Source # 
Instance details

Defined in Data.Act.Act

RActSg Bool All Source # 
Instance details

Defined in Data.Act.Act

RActSg Bool Any Source # 
Instance details

Defined in Data.Act.Act

RActSg x () Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => RActSg s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

RActSg x s => RActSg x (Identity s) Source # 
Instance details

Defined in Data.Act.Act

RActSg x (Last x) Source # 
Instance details

Defined in Data.Act.Act

RActSg x (Last x) Source # 
Instance details

Defined in Data.Act.Act

LActSg x s => RActSg x (Dual s) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActSg x (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActSg x (Sum x) Source # 
Instance details

Defined in Data.Act.Act

(Coercible x s, Semigroup s) => RActSg x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => RActSg x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

RActSg x s => RActSg x (Maybe s) Source # 
Instance details

Defined in Data.Act.Act

RActSg x s => RActSg (Identity x) (Identity s) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActSg (Product x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActSg (Sum x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActSg (Sum x) (Sum x) Source # 
Instance details

Defined in Data.Act.Act

(RActSg x s, Functor f) => RActSg (f x) (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(RActSg x1 s1, RActSg x2 s2) => RActSg (x1, x2) (s1, s2) Source # 
Instance details

Defined in Data.Act.Act

class (RActSg x s, Monoid s) => RActMn x s Source #

A right monoid action, also called a right unitary action.

In addition to the laws of RActSg, instances must satisfy the following law :

 x $<> mempty == x

Instances

Instances details
Monoid s => RActMn () s Source # 
Instance details

Defined in Data.Act.Act

RActMn Bool All Source # 
Instance details

Defined in Data.Act.Act

RActMn Bool Any Source # 
Instance details

Defined in Data.Act.Act

RActMn x () Source # 
Instance details

Defined in Data.Act.Act

Monoid s => RActMn s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

RActMn x s => RActMn x (Identity s) Source # 
Instance details

Defined in Data.Act.Act

RActMn x (Last x) Source # 
Instance details

Defined in Data.Act.Act

LActMn x s => RActMn x (Dual s) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActMn x (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActMn x (Sum x) Source # 
Instance details

Defined in Data.Act.Act

(Coercible x s, Monoid s) => RActMn x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Act

Monoid s => RActMn x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

RActSg x s => RActMn x (Maybe s) Source # 
Instance details

Defined in Data.Act.Act

RActMn x s => RActMn (Identity x) (Identity s) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActMn (Product x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActMn (Sum x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActMn (Sum x) (Sum x) Source # 
Instance details

Defined in Data.Act.Act

(RActMn x s, Functor f) => RActMn (f x) (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(RActMn x1 s1, RActMn x2 s2) => RActMn (x1, x2) (s1, s2) Source # 
Instance details

Defined in Data.Act.Act

type RActGp x s = (RActMn x s, Group s) Source #

A left action of groups. No additional laws are needed.

class (RAct x s, Semigroup x) => RActDistrib x s Source #

A right distributive action

Instances must satisfy the following law :

 (x <> y) $<> s == (x $<> s) <> (y $<> s)

Instances

Instances details
RActDistrib () s Source # 
Instance details

Defined in Data.Act.Act

Semigroup x => RActDistrib x () Source # 
Instance details

Defined in Data.Act.Act

RActDistrib x s => RActDistrib x (Identity s) Source # 
Instance details

Defined in Data.Act.Act

LActDistrib x s => RActDistrib x (Dual s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup x => RActDistrib x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

RActDistrib x s => RActDistrib (Identity x) (Identity s) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActDistrib (Sum x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

RAct x s => RActDistrib [x] (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(RActDistrib x1 s1, RActDistrib x2 s2) => RActDistrib (x1, x2) (s1, s2) Source # 
Instance details

Defined in Data.Act.Act

type RActSgMorph x s = (RActSg x s, RActDistrib x s) Source #

A right action by morphism of semigroups

Whenever the constaints RActSg x s and RActDistrib x s are satisfied, ($<> s) is a morphism of semigroups for any s.

class (RAct x s, Monoid x) => RActNeutral x s Source #

A right action on a monoid that preserves its neutral element.

Instances must satisfy the following law :

 x $<> mempty == x

Instances

Instances details
RActNeutral () s Source # 
Instance details

Defined in Data.Act.Act

Monoid x => RActNeutral x () Source # 
Instance details

Defined in Data.Act.Act

RActNeutral x s => RActNeutral x (Identity s) Source # 
Instance details

Defined in Data.Act.Act

LActNeutral x s => RActNeutral x (Dual s) Source # 
Instance details

Defined in Data.Act.Act

Monoid x => RActNeutral x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

RActNeutral x s => RActNeutral (Identity x) (Identity s) Source # 
Instance details

Defined in Data.Act.Act

Num x => RActNeutral (Sum x) (Product x) Source # 
Instance details

Defined in Data.Act.Act

RAct x s => RActNeutral [x] (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(RActNeutral x1 s1, RActNeutral x2 s2) => RActNeutral (x1, x2) (s1, s2) Source # 
Instance details

Defined in Data.Act.Act

type RActMnMorph x s = (RActMn x s, RActSgMorph x s, RActNeutral x s) Source #

A right action by morphism of monoids i.e. such that

($<> s) is a morphism of monoids

Newtypes for instance derivation

newtype ActSelf s Source #

A semigroup always acts on itself by translation.

Notice that whenever there is an instance LAct x s with x different from s, this action is lifted to an ActSelf action.

>>> ActSelf "Hello" <>$ " World !"
"Hello World !"

Constructors

ActSelf 

Fields

Instances

Instances details
Semigroup s => LAct s (ActSelf s) Source #

Semigroup action (monoid action when Monoid s)

Instance details

Defined in Data.Act.Act

Methods

lact :: ActSelf s -> s -> s Source #

(<>$) :: ActSelf s -> s -> s Source #

Monoid s => LActMn s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => LActSg s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => RAct s (ActSelf s) Source #

Semigroup action (monoid action when Monoid s)

Instance details

Defined in Data.Act.Act

Methods

ract :: s -> ActSelf s -> s Source #

($<>) :: s -> ActSelf s -> s Source #

Monoid s => RActMn s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => RActSg s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Monoid s => LActCyclic s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Cyclic

Methods

lorigin' :: s Source #

lshift :: s -> ActSelf s Source #

(Eq s, Monoid s) => LActGen s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Cyclic

Monoid s => RActCyclic s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Cyclic

Methods

rorigin' :: s Source #

rshift :: s -> ActSelf s Source #

(Eq s, Monoid s) => RActGen s (ActSelf s) Source # 
Instance details

Defined in Data.Act.Cyclic

Group g => LTorsor g (ActSelf g) Source # 
Instance details

Defined in Data.Act.Torsor

Methods

ldiff :: g -> g -> ActSelf g Source #

(.-.) :: g -> g -> ActSelf g Source #

Group g => RTorsor g (ActSelf g) Source # 
Instance details

Defined in Data.Act.Torsor

Methods

rdiff :: g -> g -> ActSelf g Source #

(.~.) :: g -> g -> ActSelf g Source #

Monoid s => Monoid (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Methods

mempty :: ActSelf s #

mappend :: ActSelf s -> ActSelf s -> ActSelf s #

mconcat :: [ActSelf s] -> ActSelf s #

Semigroup s => Semigroup (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Methods

(<>) :: ActSelf s -> ActSelf s -> ActSelf s #

sconcat :: NonEmpty (ActSelf s) -> ActSelf s #

stimes :: Integral b => b -> ActSelf s -> ActSelf s #

Show s => Show (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Methods

showsPrec :: Int -> ActSelf s -> ShowS #

show :: ActSelf s -> String #

showList :: [ActSelf s] -> ShowS #

Eq s => Eq (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Methods

(==) :: ActSelf s -> ActSelf s -> Bool #

(/=) :: ActSelf s -> ActSelf s -> Bool #

Group s => Group (ActSelf s) Source # 
Instance details

Defined in Data.Act.Act

Methods

invert :: ActSelf s -> ActSelf s #

(~~) :: ActSelf s -> ActSelf s -> ActSelf s #

pow :: Integral x => ActSelf s -> x -> ActSelf s #

newtype ActSelf' x Source #

Actions of ActSelf' behave similarly to those of ActSelf, but first try to coerce x to s before using the Semigroup instance. If x can be coerced to s, then we use the ActSelf action.

This is meant to be used in conjunction with the deriving via strategy when defining newtype wrappers. Here is a concrete example, where durations act on time. Here, Seconds is not a semigroup and Duration is a group that acts on time via the derived instance LAct Seconds Duration.

import Data.Semigroup

newtype Seconds = Seconds Float

newtype Duration = Duration Seconds
  deriving (Semigroup, Monoid, Group) via (Sum Float)
  deriving (LAct Seconds) via (ActSelf' (Sum Float))
>>> Duration 2 <>$ Seconds 3
Seconds 5.0

Constructors

ActSelf' 

Fields

Instances

Instances details
(Semigroup s, Coercible x s) => LAct x (ActSelf' s) Source #

Semigroup action (monoid action when Monoid s)

Instance details

Defined in Data.Act.Act

Methods

lact :: ActSelf' s -> x -> x Source #

(<>$) :: ActSelf' s -> x -> x Source #

(Coercible x s, Monoid s) => LActMn x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Act

(Coercible x s, Semigroup s) => LActSg x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Act

(Semigroup s, Coercible x s) => RAct x (ActSelf' s) Source #

Semigroup action (monoid action when Monoid s)

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> ActSelf' s -> x Source #

($<>) :: x -> ActSelf' s -> x Source #

(Coercible x s, Monoid s) => RActMn x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Act

(Coercible x s, Semigroup s) => RActSg x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Act

(Coercible x s, Monoid s) => LActCyclic x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Cyclic

Methods

lorigin' :: x Source #

lshift :: x -> ActSelf' s Source #

(Eq x, Coercible x s, Monoid s) => LActGen x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Cyclic

(Coercible x s, Monoid s) => RActCyclic x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Cyclic

Methods

rorigin' :: x Source #

rshift :: x -> ActSelf' s Source #

(Eq x, Coercible x s, Monoid s) => RActGen x (ActSelf' s) Source # 
Instance details

Defined in Data.Act.Cyclic

(Group g, Coercible x g) => LTorsor x (ActSelf' g) Source # 
Instance details

Defined in Data.Act.Torsor

Methods

ldiff :: x -> x -> ActSelf' g Source #

(.-.) :: x -> x -> ActSelf' g Source #

(Group g, Coercible x g) => RTorsor x (ActSelf' g) Source # 
Instance details

Defined in Data.Act.Torsor

Methods

rdiff :: x -> x -> ActSelf' g Source #

(.~.) :: x -> x -> ActSelf' g Source #

Monoid x => Monoid (ActSelf' x) Source # 
Instance details

Defined in Data.Act.Act

Methods

mempty :: ActSelf' x #

mappend :: ActSelf' x -> ActSelf' x -> ActSelf' x #

mconcat :: [ActSelf' x] -> ActSelf' x #

Semigroup x => Semigroup (ActSelf' x) Source # 
Instance details

Defined in Data.Act.Act

Methods

(<>) :: ActSelf' x -> ActSelf' x -> ActSelf' x #

sconcat :: NonEmpty (ActSelf' x) -> ActSelf' x #

stimes :: Integral b => b -> ActSelf' x -> ActSelf' x #

Show x => Show (ActSelf' x) Source # 
Instance details

Defined in Data.Act.Act

Methods

showsPrec :: Int -> ActSelf' x -> ShowS #

show :: ActSelf' x -> String #

showList :: [ActSelf' x] -> ShowS #

Eq x => Eq (ActSelf' x) Source # 
Instance details

Defined in Data.Act.Act

Methods

(==) :: ActSelf' x -> ActSelf' x -> Bool #

(/=) :: ActSelf' x -> ActSelf' x -> Bool #

Group x => Group (ActSelf' x) Source # 
Instance details

Defined in Data.Act.Act

Methods

invert :: ActSelf' x -> ActSelf' x #

(~~) :: ActSelf' x -> ActSelf' x -> ActSelf' x #

pow :: Integral x0 => ActSelf' x -> x0 -> ActSelf' x #

newtype ActMap s Source #

An action on any functor that uses the fmap function. For example :

>>> ActMap (ActSelf "Hello") <>$ [" World !", " !"]
["Hello World !","Hello !"]

Constructors

ActMap 

Fields

Instances

Instances details
Monoid s => Monoid (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

Methods

mempty :: ActMap s #

mappend :: ActMap s -> ActMap s -> ActMap s #

mconcat :: [ActMap s] -> ActMap s #

Semigroup s => Semigroup (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

Methods

(<>) :: ActMap s -> ActMap s -> ActMap s #

sconcat :: NonEmpty (ActMap s) -> ActMap s #

stimes :: Integral b => b -> ActMap s -> ActMap s #

Show s => Show (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

Methods

showsPrec :: Int -> ActMap s -> ShowS #

show :: ActMap s -> String #

showList :: [ActMap s] -> ShowS #

Eq s => Eq (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

Methods

(==) :: ActMap s -> ActMap s -> Bool #

(/=) :: ActMap s -> ActMap s -> Bool #

Group s => Group (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

Methods

invert :: ActMap s -> ActMap s #

(~~) :: ActMap s -> ActMap s -> ActMap s #

pow :: Integral x => ActMap s -> x -> ActMap s #

(LAct x s, Functor f) => LAct (f x) (ActMap s) Source #

Preserves the semigroup (resp. monoid) property of LAct x s, but not the morphism properties, which depend on potential Semigroup (resp. Monoid) instances of f x

Instance details

Defined in Data.Act.Act

Methods

lact :: ActMap s -> f x -> f x Source #

(<>$) :: ActMap s -> f x -> f x Source #

LAct x s => LActDistrib [x] (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(LActMn x s, Functor f) => LActMn (f x) (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

LAct x s => LActNeutral [x] (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(LActSg x s, Functor f) => LActSg (f x) (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(RAct x s, Functor f) => RAct (f x) (ActMap s) Source #

Preserves the semigroup (resp. monoid) property of LAct x s, but not the morphism properties, which depend on potential Semigroup (resp. Monoid) instances of f x. When $f = []@, this is an action by morphism of monoids.

Instance details

Defined in Data.Act.Act

Methods

ract :: f x -> ActMap s -> f x Source #

($<>) :: f x -> ActMap s -> f x Source #

RAct x s => RActDistrib [x] (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(RActMn x s, Functor f) => RActMn (f x) (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

RAct x s => RActNeutral [x] (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

(RActSg x s, Functor f) => RActSg (f x) (ActMap s) Source # 
Instance details

Defined in Data.Act.Act

newtype ActFold s Source #

Lifting an a container as an action using foldr (for left actions) or foldl (for right actions). For a strict version, use ActFold'.

A left action (<>$) can be seen as an operator for the foldr function, and a allowing to lift any action to some Foldable container.

> ActFold [Sum (1 :: Int), Sum 2, Sum 3] <>$ (4 :: Int)
  10

Constructors

ActFold 

Fields

Instances

Instances details
(Foldable f, LAct x s) => LAct x (ActFold (f s)) Source #

When used with lists [], this is a monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: ActFold (f s) -> x -> x Source #

(<>$) :: ActFold (f s) -> x -> x Source #

LAct x s => LActSg x (ActFold [s]) Source # 
Instance details

Defined in Data.Act.Act

(Foldable f, RAct x s) => RAct x (ActFold (f s)) Source #

When used with lists [], this is a monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> ActFold (f s) -> x Source #

($<>) :: x -> ActFold (f s) -> x Source #

Monoid s => Monoid (ActFold s) Source # 
Instance details

Defined in Data.Act.Act

Methods

mempty :: ActFold s #

mappend :: ActFold s -> ActFold s -> ActFold s #

mconcat :: [ActFold s] -> ActFold s #

Semigroup s => Semigroup (ActFold s) Source # 
Instance details

Defined in Data.Act.Act

Methods

(<>) :: ActFold s -> ActFold s -> ActFold s #

sconcat :: NonEmpty (ActFold s) -> ActFold s #

stimes :: Integral b => b -> ActFold s -> ActFold s #

Show s => Show (ActFold s) Source # 
Instance details

Defined in Data.Act.Act

Methods

showsPrec :: Int -> ActFold s -> ShowS #

show :: ActFold s -> String #

showList :: [ActFold s] -> ShowS #

Eq s => Eq (ActFold s) Source # 
Instance details

Defined in Data.Act.Act

Methods

(==) :: ActFold s -> ActFold s -> Bool #

(/=) :: ActFold s -> ActFold s -> Bool #

Group s => Group (ActFold s) Source # 
Instance details

Defined in Data.Act.Act

Methods

invert :: ActFold s -> ActFold s #

(~~) :: ActFold s -> ActFold s -> ActFold s #

pow :: Integral x => ActFold s -> x -> ActFold s #

newtype ActFold' s Source #

Lifting an a container as an action using fold'r (for left actions) or foldl' (for right actions). For a lazy version, use ActFold.

A left action (<>$) can be seen as an operator for the foldr function, and a allowing to lift any action to some Foldable container.

>>> ActFold' [Sum (1 :: Int), Sum 2, Sum 3] <>$ (4 :: Int)
10

Constructors

ActFold' 

Fields

Instances

Instances details
(Foldable f, LAct x s) => LAct x (ActFold' (f s)) Source #

When used with lists [], this is a monoid action

Instance details

Defined in Data.Act.Act

Methods

lact :: ActFold' (f s) -> x -> x Source #

(<>$) :: ActFold' (f s) -> x -> x Source #

LAct x s => LActSg x (ActFold' [s]) Source # 
Instance details

Defined in Data.Act.Act

(Foldable f, RAct x s) => RAct x (ActFold' (f s)) Source #

When used with lists [], this is a monoid action

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> ActFold' (f s) -> x Source #

($<>) :: x -> ActFold' (f s) -> x Source #

Monoid s => Monoid (ActFold' s) Source # 
Instance details

Defined in Data.Act.Act

Methods

mempty :: ActFold' s #

mappend :: ActFold' s -> ActFold' s -> ActFold' s #

mconcat :: [ActFold' s] -> ActFold' s #

Semigroup s => Semigroup (ActFold' s) Source # 
Instance details

Defined in Data.Act.Act

Methods

(<>) :: ActFold' s -> ActFold' s -> ActFold' s #

sconcat :: NonEmpty (ActFold' s) -> ActFold' s #

stimes :: Integral b => b -> ActFold' s -> ActFold' s #

Show s => Show (ActFold' s) Source # 
Instance details

Defined in Data.Act.Act

Methods

showsPrec :: Int -> ActFold' s -> ShowS #

show :: ActFold' s -> String #

showList :: [ActFold' s] -> ShowS #

Eq s => Eq (ActFold' s) Source # 
Instance details

Defined in Data.Act.Act

Methods

(==) :: ActFold' s -> ActFold' s -> Bool #

(/=) :: ActFold' s -> ActFold' s -> Bool #

Group s => Group (ActFold' s) Source # 
Instance details

Defined in Data.Act.Act

Methods

invert :: ActFold' s -> ActFold' s #

(~~) :: ActFold' s -> ActFold' s -> ActFold' s #

pow :: Integral x => ActFold' s -> x -> ActFold' s #

newtype ActTrivial x Source #

The trivial action where any element of s acts as the identity function on x

>>> ActTrivial "Hello !" <>$ "Hi !"
" Hi !"

Constructors

ActTrivial 

Fields

Instances

Instances details
LAct x (ActTrivial s) Source #

Action by morphism of monoids when Monoid s and Monoid x

Instance details

Defined in Data.Act.Act

Methods

lact :: ActTrivial s -> x -> x Source #

(<>$) :: ActTrivial s -> x -> x Source #

Semigroup x => LActDistrib x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

Monoid s => LActMn x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

Monoid x => LActNeutral x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => LActSg x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

RAct x (ActTrivial s) Source #

Action by morphism of monoids when Monoid s and Monoid x

Instance details

Defined in Data.Act.Act

Methods

ract :: x -> ActTrivial s -> x Source #

($<>) :: x -> ActTrivial s -> x Source #

Semigroup x => RActDistrib x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

Monoid s => RActMn x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

Monoid x => RActNeutral x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

Semigroup s => RActSg x (ActTrivial s) Source # 
Instance details

Defined in Data.Act.Act

Monoid x => Monoid (ActTrivial x) Source # 
Instance details

Defined in Data.Act.Act

Semigroup x => Semigroup (ActTrivial x) Source # 
Instance details

Defined in Data.Act.Act

Show x => Show (ActTrivial x) Source # 
Instance details

Defined in Data.Act.Act

Eq x => Eq (ActTrivial x) Source # 
Instance details

Defined in Data.Act.Act

Methods

(==) :: ActTrivial x -> ActTrivial x -> Bool #

(/=) :: ActTrivial x -> ActTrivial x -> Bool #

Group x => Group (ActTrivial x) Source # 
Instance details

Defined in Data.Act.Act

Methods

invert :: ActTrivial x -> ActTrivial x #

(~~) :: ActTrivial x -> ActTrivial x -> ActTrivial x #

pow :: Integral x0 => ActTrivial x -> x0 -> ActTrivial x #