Skip to content

Commit 6be4716

Browse files
committed
Use groups package for group, a breaking change
TODO group's abelian should have Semigroup superclass. The MonoidalMap instance was deleted because it is not lawful. But it might need to be added to reflex. 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 6be4716

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)