1515module Data.Group where
1616
1717import Data.Monoid (class Monoid )
18- import Data.Monoid.Dual (Dual (..))
19- import Data.Ring (class Ring , negate )
2018import Data.Monoid.Additive (Additive (..))
21- import Data.Unit (Unit , unit )
19+ import Data.Monoid.Dual (Dual (..))
20+ import Prelude
2221
2322-- | A `Group` is a `Monoid` with inverses. Instances
2423-- | must satisfy the following law in addition to the monoid laws:
@@ -27,24 +26,25 @@ import Data.Unit (Unit, unit)
2726class Monoid g <= Group g where
2827 ginverse :: g -> g
2928
30- -- | A `CommutativeGroup` is a `Group` with a commutative semigroup operation.
31- -- | Also known as an Abelian group. Instances must satisfy the following law
32- -- | in addition to the group laws:
29+ -- | A `CommutativeSemigroup` is a `Semigroup` with a commutative operation.
30+ -- | Instances must satisfy the following law in addition to the group laws:
3331-- |
3432-- | - Commutativity: `forall x, y. x <> y = y <> x`
35- class Group g <= CommutativeGroup g
33+ class Semigroup g <= CommutativeSemigroup g
3634
37- instance unitIsGroup :: Group Unit where
35+ instance groupUnit :: Group Unit where
3836 ginverse _ = unit
3937
40- instance unitIsCommutativeGroup :: CommutativeGroup Unit
38+ instance commutativeSemigroupUnit :: CommutativeSemigroup Unit
4139
42- instance dualGroupsAreGroups :: (Group g ) => Group (Dual g ) where
40+ instance groupDual :: (Group g ) => Group (Dual g ) where
4341 ginverse (Dual x) = Dual (ginverse x)
4442
45- instance dualCommutativeGroupsAreCommutativeGroups :: (CommutativeGroup g ) => CommutativeGroup (Dual g )
43+ instance commutativeSemigroupDual :: (CommutativeSemigroup g ) => CommutativeSemigroup (Dual g )
4644
47- instance ringsAreAdditiveGroups :: (Ring r ) => Group (Additive r ) where
45+ instance groupAdditive :: (Ring r ) => Group (Additive r ) where
4846 ginverse (Additive x) = Additive (negate x)
4947
50- instance ringsAreCommutativeAdditiveGroups :: (Ring r ) => CommutativeGroup (Additive r )
48+ instance commutativeSemigroupAdditive :: (Ring r ) => CommutativeSemigroup (Additive r )
49+
50+ type Abelian a b = Group a => CommutativeSemigroup a => b
0 commit comments