monoid-extras 0.6.1 → 0.6.2
raw patch · 3 files changed
+60/−4 lines, 3 filesdep ~basedep ~semigroupoidsPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, semigroupoids
API changes (from Hackage documentation)
+ Data.Monoid.Action: Conjugate :: m -> Conjugate m
+ Data.Monoid.Action: Regular :: m -> Regular m
+ Data.Monoid.Action: [getConjugate] :: Conjugate m -> m
+ Data.Monoid.Action: [getRegular] :: Regular m -> m
+ Data.Monoid.Action: class Group m => Torsor m s
+ Data.Monoid.Action: difference :: Torsor m s => s -> s -> m
+ Data.Monoid.Action: instance Data.Group.Group m => Data.Monoid.Action.Action m (Data.Monoid.Action.Conjugate m)
+ Data.Monoid.Action: instance Data.Group.Group m => Data.Monoid.Action.Torsor m (Data.Monoid.Action.Regular m)
+ Data.Monoid.Action: instance GHC.Base.Semigroup m => Data.Monoid.Action.Action m (Data.Monoid.Action.Regular m)
+ Data.Monoid.Action: instance GHC.Num.Num a => Data.Monoid.Action.Action GHC.Num.Integer.Integer (Data.Semigroup.Internal.Product a)
+ Data.Monoid.Action: instance GHC.Num.Num a => Data.Monoid.Action.Action GHC.Num.Integer.Integer (Data.Semigroup.Internal.Sum a)
+ Data.Monoid.Action: instance GHC.Real.Fractional a => Data.Monoid.Action.Action GHC.Real.Rational (Data.Semigroup.Internal.Product a)
+ Data.Monoid.Action: instance GHC.Real.Fractional a => Data.Monoid.Action.Action GHC.Real.Rational (Data.Semigroup.Internal.Sum a)
+ Data.Monoid.Action: newtype Conjugate m
+ Data.Monoid.Action: newtype Regular m
Files
- CHANGES +9/−0
- monoid-extras.cabal +4/−4
- src/Data/Monoid/Action.hs +47/−0
CHANGES view
@@ -1,8 +1,17 @@+* 0.6.2: 20 Dec 2022++- New class and newtypes in `Data.Monoid.Action` (thanks to Manuel Bärenz):+ - `Torsor` class for transitive group actions+ - `Regular` and `Conjugate` newtypes for groups acting on themselves+ * 0.6.1: 16 Nov 2021 - Add more efficient `stimes` implementations for several `Semigroup` instances. Thanks to BlackCapCoder for the patch! - Allow `base-4.16` and test on GHC 9.2.1.++- r1: allow `base-4.16` in benchmarks+- r2 (15 August 2022): allow `base-4.17` and test with GHC 9.4. * 0.6: 8 May 2021
monoid-extras.cabal view
@@ -1,5 +1,5 @@ name: monoid-extras-version: 0.6.1+version: 0.6.2 synopsis: Various extra monoid-related definitions and utilities description: Various extra monoid-related definitions and utilities, such as monoid actions, monoid coproducts, semi-direct@@ -14,7 +14,7 @@ category: Data build-type: Simple cabal-version: >=1.10-tested-with: GHC ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.4 || ==9.0.1 || ==9.2.1+tested-with: GHC ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.4 || ==9.4.1 source-repository head type: git@@ -36,7 +36,7 @@ Data.Monoid.Split, Data.Monoid.WithSemigroup - build-depends: base >= 4.11 && < 4.17,+ build-depends: base >= 4.11 && < 4.18, groups < 0.6, semigroupoids >= 4.0 && < 5.4 @@ -55,7 +55,7 @@ hs-source-dirs: benchmarks main-is: SemiDirectProduct.hs type: exitcode-stdio-1.0- build-depends: base >= 4.3 && < 4.16+ build-depends: base >= 4.3 && < 4.18 , semigroups , criterion , monoid-extras
src/Data/Monoid/Action.hs view
@@ -14,9 +14,13 @@ module Data.Monoid.Action ( Action(..)+ , Regular(..)+ , Conjugate(..)+ , Torsor(..) ) where import Data.Semigroup+import Data.Group ------------------------------------------------------------ -- Monoid and semigroup actions@@ -81,3 +85,46 @@ instance Action (Endo a) a where act = appEndo +instance Num a => Action Integer (Sum a) where+ n `act` a = fromInteger n <> a++instance Num a => Action Integer (Product a) where+ n `act` a = fromInteger n <> a++instance Fractional a => Action Rational (Sum a) where+ n `act` a = Sum (fromRational n) <> a++instance Fractional a => Action Rational (Product a) where+ n `act` a = Product (fromRational n) <> a++-- | An action of a group is "free transitive", "regular", or a "torsor"+-- iff it is invertible.+--+-- Given an original value `sOrig`, and a value `sActed` that is the result+-- of acting on `sOrig` by some `m`,+-- it is possible to recover this `m`.+-- This is encoded in the laws:+--+-- * @(m `'act'` s) `'difference'` s = m@+-- * @(sActed `'difference'` sOrig) `'act'` sOrig = sActed@+class Group m => Torsor m s where++ -- | @'difference' sActed sOrig@ is the element @m@ such that @sActed = m `'act'` sOrig@.+ difference :: s -> s -> m++-- | Any monoid acts on itself by left multiplication.+-- This newtype witnesses this action:+-- @'getRegular' $ 'Regular' m1 `'act'` 'Regular' m2 = m1 '<>' m2@+newtype Regular m = Regular { getRegular :: m }++instance Semigroup m => Action m (Regular m) where+ m1 `act` Regular m2 = Regular $ m1 <> m2++instance Group m => Torsor m (Regular m) where+ Regular m1 `difference` Regular m2 = m1 ~~ m2++-- | Any group acts on itself by conjugation.+newtype Conjugate m = Conjugate { getConjugate :: m }++instance Group m => Action m (Conjugate m) where+ m1 `act` Conjugate m2 = Conjugate $ m1 <> m2 ~~ m1