Skip to content

Commit f6d4c9a

Browse files
committed
Delete group class, the groups package should be used instead
Keep `Additive`, however. See ChangeLog for more details. The version in the cabal file is bumped to remind whoever does the future release that this is breaking change. Closes #4.
1 parent 485c592 commit f6d4c9a

File tree

3 files changed

+18
-50
lines changed

3 files changed

+18
-50
lines changed

ChangeLog.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# Revision history for patch
22

3+
## Unreleased
4+
5+
* Remove the `split-these` flag.
6+
We do not need it as we only use the `These` datatype which is provided in all versions.
7+
8+
* Stop defining `Group`; `Group` from the `groups` package can be used instead.
9+
10+
Most of the instances are provided by `groups`, except the `Group
11+
MonoidalMap` instance, which is not lawful. `reflex` might provide it as an
12+
orphan for backwards compat, temporarily, but it should eventually be removed
13+
everywhere.
14+
15+
* `Applicative` is still defined, because the `Abelian` from `groups` has too
16+
stringent a constraint.
17+
318
## 0.0.3.2
419

520
* Update version bounds

patch.cabal

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Name: patch
2-
Version: 0.0.3.2
2+
Version: 0.1.0.0
33
Synopsis: Data structures for describing changes to other data structures.
44
Description:
55
Data structures for describing changes to other data structures.
@@ -25,11 +25,6 @@ tested-with:
2525
GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.1
2626
GHCJS ==8.4
2727

28-
flag split-these
29-
description: Use split these/semialign packages
30-
manual: False
31-
default: True
32-
3328
library
3429
hs-source-dirs: src
3530
default-language: Haskell2010
@@ -40,6 +35,7 @@ library
4035
, dependent-sum >= 0.6 && < 0.8
4136
, lens >= 4.7 && < 5
4237
, semigroupoids >= 4.0 && < 6
38+
, these >= 0.4 && < 1.2
4339
, transformers >= 0.5.6.0 && < 0.6
4440
, witherable >= 0.3 && < 0.4
4541

@@ -56,14 +52,6 @@ library
5652

5753
ghc-options: -Wall -fwarn-redundant-constraints -fwarn-tabs
5854

59-
if flag(split-these)
60-
build-depends: these >= 1 && <1.2
61-
, semialign >=1 && <1.2
62-
, monoidal-containers >= 0.6 && < 0.7
63-
else
64-
build-depends: these >= 0.4 && <0.9
65-
, monoidal-containers == 0.4.0.0
66-
6755
test-suite hlint
6856
default-language: Haskell2010
6957
type: exitcode-stdio-1.0

src/Data/Patch.hs

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
{-# LANGUAGE CPP #-}
2-
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3-
{-# LANGUAGE StandaloneDeriving #-}
4-
{-# LANGUAGE TypeFamilies #-}
52
{-# LANGUAGE TypeOperators #-}
3+
{-# LANGUAGE TypeFamilies #-}
64
-- |
75
-- Module:
86
-- Data.Patch
@@ -13,10 +11,8 @@ module Data.Patch
1311
, module X
1412
) where
1513

16-
import Control.Applicative
1714
import Data.Functor.Const (Const (..))
1815
import Data.Functor.Identity
19-
import Data.Map.Monoidal (MonoidalMap)
2016
import Data.Proxy
2117
#if !MIN_VERSION_base(4,11,0)
2218
import Data.Semigroup (Semigroup (..))
@@ -39,12 +35,6 @@ import Data.Patch.MapWithMove as X
3935
, unsafePatchMapWithMove
4036
)
4137

42-
-- | A 'Group' is a 'Monoid' where every element has an inverse.
43-
class (Semigroup q, Monoid q) => Group q where
44-
negateG :: q -> q
45-
(~~) :: q -> q -> q
46-
r ~~ s = r <> negateG s
47-
4838
-- | An 'Additive' 'Semigroup' is one where (<>) is commutative
4939
class Semigroup q => Additive q where
5040

@@ -55,52 +45,27 @@ instance Additive p => Patch (AdditivePatch p) where
5545
type PatchTarget (AdditivePatch p) = p
5646
apply (AdditivePatch p) q = Just $ p <> q
5747

58-
instance (Ord k, Group q) => Group (MonoidalMap k q) where
59-
negateG = fmap negateG
60-
61-
instance (Ord k, Additive q) => Additive (MonoidalMap k q)
62-
6348
-- | Trivial group.
64-
instance Group () where
65-
negateG _ = ()
66-
_ ~~ _ = ()
6749
instance Additive ()
6850

6951
-- | Product group. A Pair of groups gives rise to a group
70-
instance (Group a, Group b) => Group (a, b) where
71-
negateG (a, b) = (negateG a, negateG b)
72-
(a, b) ~~ (c, d) = (a ~~ c, b ~~ d)
7352
instance (Additive a, Additive b) => Additive (a, b)
7453

7554
-- See https://gitlab.haskell.org/ghc/ghc/issues/11135#note_111802 for the reason Compose is not also provided.
7655
-- Base does not define Monoid (Compose f g a) so this is the best we can
7756
-- really do for functor composition.
78-
instance Group (f (g a)) => Group ((f :.: g) a) where
79-
negateG (Comp1 xs) = Comp1 (negateG xs)
80-
Comp1 xs ~~ Comp1 ys = Comp1 (xs ~~ ys)
8157
instance Additive (f (g a)) => Additive ((f :.: g) a)
8258

8359
-- | Product of groups, Functor style.
84-
instance (Group (f a), Group (g a)) => Group ((f :*: g) a) where
85-
negateG (a :*: b) = negateG a :*: negateG b
86-
(a :*: b) ~~ (c :*: d) = (a ~~ c) :*: (b ~~ d)
8760
instance (Additive (f a), Additive (g a)) => Additive ((f :*: g) a)
8861

8962
-- | Trivial group, Functor style
90-
instance Group (Proxy x) where
91-
negateG _ = Proxy
92-
_ ~~ _ = Proxy
9363
instance Additive (Proxy x)
9464

9565
-- | Const lifts groups into a functor.
96-
deriving instance Group a => Group (Const a x)
9766
instance Additive a => Additive (Const a x)
9867
-- | Ideitnty lifts groups pointwise (at only one point)
99-
deriving instance Group a => Group (Identity a)
10068
instance Additive a => Additive (Identity a)
10169

10270
-- | Functions lift groups pointwise.
103-
instance Group b => Group (a -> b) where
104-
negateG f = negateG . f
105-
(~~) = liftA2 (~~)
10671
instance Additive b => Additive (a -> b)

0 commit comments

Comments
 (0)