packages feed

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 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