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

Data.Semidirect.Strict

Description

Semidirect products for left and right actions.

For a lazy version, see Lazy.

Usage :
>>> import Data.Semigroup
>>> LSemidirect (Sum 1) (Product 2) <> LSemidirect (Sum (3 :: Int)) (Product (4 :: Int))
LSemidirect {lactee = Sum {getSum = 7}, lactor = Product {getProduct = 8}}
Property checking :

There is a Semigroup instance for LSemidirect (resp. RSemidirect) only if there is a LActSgMorph (resp. RActSgMorph) instance. For example, Sum Int acting on itself is not a semigroup action by morphism and therefore the semidirect product is not associative :

>>> LSemidirect (Sum 1) (Sum 2) <> LSemidirect (Sum (3 :: Int)) (Sum (4 :: Int))
No instance for `LActDistrib (Sum Int) (Sum Int)'
  arising from a use of `<>'
Synopsis

Documentation

data LSemidirect x s Source #

A semi-direct product for a left action, where s acts on x

Constructors

LSemidirect 

Fields

  • lactee :: !x

    The value being acted on

  • lactor :: !s

    The acting element

Instances

Instances details
Bifunctor LSemidirect Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

bimap :: (a -> b) -> (c -> d) -> LSemidirect a c -> LSemidirect b d #

first :: (a -> b) -> LSemidirect a c -> LSemidirect b c #

second :: (b -> c) -> LSemidirect a b -> LSemidirect a c #

Functor (LSemidirect x) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

fmap :: (a -> b) -> LSemidirect x a -> LSemidirect x b #

(<$) :: a -> LSemidirect x b -> LSemidirect x a #

LActMnMorph x s => Monoid (LSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

mempty :: LSemidirect x s #

mappend :: LSemidirect x s -> LSemidirect x s -> LSemidirect x s #

mconcat :: [LSemidirect x s] -> LSemidirect x s #

LActSgMorph x s => Semigroup (LSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

(<>) :: LSemidirect x s -> LSemidirect x s -> LSemidirect x s #

sconcat :: NonEmpty (LSemidirect x s) -> LSemidirect x s #

stimes :: Integral b => b -> LSemidirect x s -> LSemidirect x s #

(Read x, Read s) => Read (LSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

(Show x, Show s) => Show (LSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

showsPrec :: Int -> LSemidirect x s -> ShowS #

show :: LSemidirect x s -> String #

showList :: [LSemidirect x s] -> ShowS #

(Eq x, Eq s) => Eq (LSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

(==) :: LSemidirect x s -> LSemidirect x s -> Bool #

(/=) :: LSemidirect x s -> LSemidirect x s -> Bool #

lerase :: Monoid x => LSemidirect x s -> LSemidirect x s Source #

Erase the actee (i.e. replace it with mempty).

lforget :: Monoid s => LSemidirect x s -> LSemidirect x s Source #

Forget the actor (i.e. replace it with mempty).

lembedActee :: Monoid s => x -> LSemidirect x s Source #

Make a semidirect pair whose actor is mempty.

lembedActor :: Monoid x => s -> LSemidirect x s Source #

Make a semidirect pair whose actee is mempty.

lfromPair :: (x, s) -> LSemidirect x s Source #

Convert a pair into a semidirect product element.

data RSemidirect x s Source #

A semidirect product for a right action, where s acts on x

Constructors

RSemidirect 

Fields

  • ractee :: !x

    The value being acted on

  • ractor :: !s

    The acting element

Instances

Instances details
Bifunctor RSemidirect Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

bimap :: (a -> b) -> (c -> d) -> RSemidirect a c -> RSemidirect b d #

first :: (a -> b) -> RSemidirect a c -> RSemidirect b c #

second :: (b -> c) -> RSemidirect a b -> RSemidirect a c #

Functor (RSemidirect x) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

fmap :: (a -> b) -> RSemidirect x a -> RSemidirect x b #

(<$) :: a -> RSemidirect x b -> RSemidirect x a #

RActMnMorph x s => Monoid (RSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

mempty :: RSemidirect x s #

mappend :: RSemidirect x s -> RSemidirect x s -> RSemidirect x s #

mconcat :: [RSemidirect x s] -> RSemidirect x s #

RActSgMorph x s => Semigroup (RSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

(<>) :: RSemidirect x s -> RSemidirect x s -> RSemidirect x s #

sconcat :: NonEmpty (RSemidirect x s) -> RSemidirect x s #

stimes :: Integral b => b -> RSemidirect x s -> RSemidirect x s #

(Read x, Read s) => Read (RSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

(Show x, Show s) => Show (RSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

showsPrec :: Int -> RSemidirect x s -> ShowS #

show :: RSemidirect x s -> String #

showList :: [RSemidirect x s] -> ShowS #

(Eq x, Eq s) => Eq (RSemidirect x s) Source # 
Instance details

Defined in Data.Semidirect.Strict

Methods

(==) :: RSemidirect x s -> RSemidirect x s -> Bool #

(/=) :: RSemidirect x s -> RSemidirect x s -> Bool #

rerase :: Monoid x => RSemidirect x s -> RSemidirect x s Source #

Erase the actee (i.e. replace it with mempty).

rforget :: Monoid s => RSemidirect x s -> RSemidirect x s Source #

Forget the actor (i.e. replace it with mempty).

rembedActee :: Monoid s => x -> RSemidirect x s Source #

Make a semidirect pair whose actor element is mempty .

rembedActor :: Monoid x => s -> RSemidirect x s Source #

Make a semidirect pair whose actee is mempty.

rfromPair :: (x, s) -> RSemidirect x s Source #

Convert a pair into a semidirect product element