groups-generic 0.1.0.0 → 0.2.0.0
raw patch · 3 files changed
+44/−38 lines, 3 filesdep ~basedep ~generic-datadep ~groupsPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, generic-data, groups
API changes (from Hackage documentation)
- Data.Group.Generics: instance (Data.Group.Abelian (f1 p), Data.Group.Abelian (f2 p)) => Data.Group.Abelian ((GHC.Generics.:*:) f1 f2 p)
- Data.Group.Generics: instance (Data.Group.Group (f1 p), Data.Group.Group (f2 p)) => Data.Group.Group ((GHC.Generics.:*:) f1 f2 p)
- Data.Group.Generics: instance Data.Group.Abelian (Data.Proxy.Proxy s)
- Data.Group.Generics: instance Data.Group.Abelian (GHC.Generics.U1 p)
- Data.Group.Generics: instance Data.Group.Abelian (f (g p)) => Data.Group.Abelian ((GHC.Generics.:.:) f g p)
- Data.Group.Generics: instance Data.Group.Abelian (f p) => Data.Group.Abelian (GHC.Generics.M1 i c f p)
- Data.Group.Generics: instance Data.Group.Abelian (f p) => Data.Group.Abelian (GHC.Generics.Rec1 f p)
- Data.Group.Generics: instance Data.Group.Abelian a => Data.Group.Abelian (Data.Functor.Const.Const a b)
- Data.Group.Generics: instance Data.Group.Abelian a => Data.Group.Abelian (Data.Functor.Identity.Identity a)
- Data.Group.Generics: instance Data.Group.Abelian a => Data.Group.Abelian (Data.Ord.Down a)
- Data.Group.Generics: instance Data.Group.Abelian g => Data.Group.Abelian (GHC.Generics.K1 i g p)
- Data.Group.Generics: instance Data.Group.Abelian g => Data.Group.Abelian (GHC.Generics.Par1 g)
- Data.Group.Generics: instance Data.Group.Group (Data.Proxy.Proxy s)
- Data.Group.Generics: instance Data.Group.Group (f (g p)) => Data.Group.Group ((GHC.Generics.:.:) f g p)
- Data.Group.Generics: instance Data.Group.Group a => Data.Group.Group (Data.Functor.Const.Const a b)
- Data.Group.Generics: instance Data.Group.Group a => Data.Group.Group (Data.Functor.Identity.Identity a)
- Data.Group.Generics: instance Data.Group.Group a => Data.Group.Group (Data.Ord.Down a)
Files
- changelog.md +4/−0
- groups-generic.cabal +4/−4
- src/Data/Group/Generics.hs +36/−34
changelog.md view
@@ -1,5 +1,9 @@ # Changelog for package `generic-groups` +## 0.2.0.0 ( February 8, 2021 ) + +* Support `groups-0.5`. + ## 0.1.0.0 ( February 14, 2020 ) * Initial release
groups-generic.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: groups-generic -version: 0.1.0.0 +version: 0.2.0.0 synopsis: Generically derive Group instances. category: Algebra, Math license: BSD-3-Clause @@ -32,11 +32,11 @@ build-depends: base - >= 4.12 && < 4.15 + >= 4.12 && < 4.17 , generic-data - ^>= 0.8.0.0 + >= 0.8.0.0 && < 0.10 , groups - ^>= 0.4.0.0 + >= 0.4.0.0 && < 0.6 hs-source-dirs: src
src/Data/Group/Generics.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE - FlexibleContexts + CPP + , FlexibleContexts , MonoLocalBinds , ScopedTypeVariables , TypeApplications @@ -7,6 +8,7 @@ #-} {-# OPTIONS_GHC -fno-warn-orphans #-} +{-# OPTIONS_GHC -fno-warn-unused-imports #-} {-| Module: Data.Group.Generics @@ -57,28 +59,6 @@ ----------------------------------------------------------------------- -- Instances for 'Group'. -instance Group (U1 p) where - invert _ = U1 - pow _ _ = U1 -instance Group (f p) => Group (Rec1 f p) where - invert (Rec1 g) = Rec1 (invert g) - pow (Rec1 g) n = Rec1 (pow g n) -instance Group (f p) => Group (M1 i c f p) where - invert (M1 g) = M1 (invert g) - pow (M1 g) n = M1 (pow g n) -instance Group g => Group (K1 i g p) where - invert (K1 g) = K1 (invert g) - pow (K1 g) n = K1 (pow g n) -instance Group g => Group (Par1 g) where - invert (Par1 g) = Par1 (invert g) - pow (Par1 g) n = Par1 (pow g n) -instance (Group (f1 p), Group (f2 p) ) => Group ((:*:) f1 f2 p) where - invert ( g1 :*: g2 ) = ( invert g1 :*: invert g2 ) - pow ( g1 :*: g2 ) n = ( pow g1 n :*: pow g2 n ) -instance Group (f (g p)) => Group ((:.:) f g p) where - invert (Comp1 g) = Comp1 (invert g) - pow (Comp1 g) n = Comp1 (pow g n) - ginvert :: forall g. ( Generic g, Group ( Rep g () ) ) => g -> g ginvert = to . invert @( Rep g () ) . from @@ -104,7 +84,29 @@ invert = ginvert pow x n = gpow x n --- Other useful instances. +instance Group (U1 p) where + invert _ = U1 + pow _ _ = U1 +instance Group (f p) => Group (Rec1 f p) where + invert (Rec1 g) = Rec1 (invert g) + pow (Rec1 g) n = Rec1 (pow g n) +instance Group (f p) => Group (M1 i c f p) where + invert (M1 g) = M1 (invert g) + pow (M1 g) n = M1 (pow g n) +instance Group g => Group (K1 i g p) where + invert (K1 g) = K1 (invert g) + pow (K1 g) n = K1 (pow g n) +instance Group g => Group (Par1 g) where + invert (Par1 g) = Par1 (invert g) + pow (Par1 g) n = Par1 (pow g n) + +#if !MIN_VERSION_groups(0,5,0) +instance (Group (f1 p), Group (f2 p) ) => Group ((:*:) f1 f2 p) where + invert ( g1 :*: g2 ) = ( invert g1 :*: invert g2 ) + pow ( g1 :*: g2 ) n = ( pow g1 n :*: pow g2 n ) +instance Group (f (g p)) => Group ((:.:) f g p) where + invert (Comp1 g) = Comp1 (invert g) + pow (Comp1 g) n = Comp1 (pow g n) instance Group a => Group (Down a) where invert (Down a) = Down (invert a) pow (Down a) n = Down (pow a n) @@ -117,19 +119,11 @@ instance Group (Proxy s) where invert _ = Proxy pow _ _ = Proxy - +#endif ----------------------------------------------------------------------- -- Instances for 'Abelian'. -instance Abelian (U1 p) -instance Abelian (f p) => Abelian (Rec1 f p) -instance Abelian (f p) => Abelian (M1 i c f p) -instance Abelian g => Abelian (K1 i g p) -instance Abelian g => Abelian (Par1 g) -instance (Abelian (f1 p), Abelian (f2 p)) => Abelian ((:*:) f1 f2 p) -instance Abelian (f (g p)) => Abelian ((:.:) f g p) - instance ( Generic g , Monoid ( GenericProduct g ) @@ -145,9 +139,17 @@ ) => Abelian ( Generically g ) +#if !MIN_VERSION_groups(0,5,0) +instance Abelian (U1 p) +instance Abelian (f p) => Abelian (Rec1 f p) +instance Abelian (f p) => Abelian (M1 i c f p) +instance Abelian g => Abelian (K1 i g p) +instance Abelian g => Abelian (Par1 g) +instance (Abelian (f1 p), Abelian (f2 p)) => Abelian ((:*:) f1 f2 p) +instance Abelian (f (g p)) => Abelian ((:.:) f g p) --- Other useful instances. instance Abelian a => Abelian (Down a) instance Abelian a => Abelian (Identity a) where instance Abelian a => Abelian (Const a b) where instance Abelian (Proxy s) where +#endif