monoid-subclasses-0.4.6.1: Subclasses of Monoid

Safe HaskellTrustworthy
LanguageHaskell2010

Data.Monoid.Cancellative

Contents

Description

This module defines the Monoid => ReductiveMonoid => (CancellativeMonoid, GCDMonoid) class hierarchy.

The ReductiveMonoid class introduces operation </> which is the inverse of <>. For the Sum monoid, this operation is subtraction; for Product it is division and for Set it's the set difference. A ReductiveMonoid is not a full group because </> may return Nothing.

The CancellativeMonoid subclass does not add any operation but it provides the additional guarantee that <> can always be undone with </>. Thus Sum is a CancellativeMonoid but Product is not because (0*n)/0 is not defined.

The GCDMonoid subclass adds the gcd operation which takes two monoidal arguments and finds their greatest common divisor, or (more generally) the greatest monoid that can be extracted with the </> operation from both.

All monoid subclasses listed above are for Abelian, i.e., commutative or symmetric monoids. Since most practical monoids in Haskell are not Abelian, each of the these classes has two symmetric superclasses:

Synopsis

Symmetric, commutative monoid classes

class Monoid m => CommutativeMonoid m #

Class of all Abelian ({i.e.}, commutative) monoids that satisfy the commutativity property:

a <> b == b <> a
Instances
CommutativeMonoid () # 
Instance details

Defined in Data.Monoid.Cancellative

CommutativeMonoid IntSet # 
Instance details

Defined in Data.Monoid.Cancellative

CommutativeMonoid a => CommutativeMonoid (Dual a) # 
Instance details

Defined in Data.Monoid.Cancellative

Num a => CommutativeMonoid (Sum a) # 
Instance details

Defined in Data.Monoid.Cancellative

Num a => CommutativeMonoid (Product a) # 
Instance details

Defined in Data.Monoid.Cancellative

Ord a => CommutativeMonoid (Set a) # 
Instance details

Defined in Data.Monoid.Cancellative

(CommutativeMonoid a, CommutativeMonoid b) => CommutativeMonoid (a, b) # 
Instance details

Defined in Data.Monoid.Cancellative

(CommutativeMonoid a, CommutativeMonoid b, CommutativeMonoid c) => CommutativeMonoid (a, b, c) # 
Instance details

Defined in Data.Monoid.Cancellative

(CommutativeMonoid a, CommutativeMonoid b, CommutativeMonoid c, CommutativeMonoid d) => CommutativeMonoid (a, b, c, d) # 
Instance details

Defined in Data.Monoid.Cancellative

class (CommutativeMonoid m, LeftReductiveMonoid m, RightReductiveMonoid m) => ReductiveMonoid m where #

Class of Abelian monoids with a partial inverse for the Monoid <> operation. The inverse operation </> must satisfy the following laws:

maybe a (b <>) (a </> b) == a
maybe a (<> b) (a </> b) == a

Methods

(</>) :: m -> m -> Maybe m infix 5 #

Instances
ReductiveMonoid () # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: () -> () -> Maybe () #

ReductiveMonoid IntSet # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: IntSet -> IntSet -> Maybe IntSet #

ReductiveMonoid a => ReductiveMonoid (Dual a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: Dual a -> Dual a -> Maybe (Dual a) #

Integral a => ReductiveMonoid (Sum a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: Sum a -> Sum a -> Maybe (Sum a) #

Integral a => ReductiveMonoid (Product a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: Product a -> Product a -> Maybe (Product a) #

Ord a => ReductiveMonoid (Set a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: Set a -> Set a -> Maybe (Set a) #

(ReductiveMonoid a, ReductiveMonoid b) => ReductiveMonoid (a, b) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: (a, b) -> (a, b) -> Maybe (a, b) #

(ReductiveMonoid a, ReductiveMonoid b, ReductiveMonoid c) => ReductiveMonoid (a, b, c) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: (a, b, c) -> (a, b, c) -> Maybe (a, b, c) #

(ReductiveMonoid a, ReductiveMonoid b, ReductiveMonoid c, ReductiveMonoid d) => ReductiveMonoid (a, b, c, d) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

(</>) :: (a, b, c, d) -> (a, b, c, d) -> Maybe (a, b, c, d) #

class (LeftCancellativeMonoid m, RightCancellativeMonoid m, ReductiveMonoid m) => CancellativeMonoid m #

Subclass of ReductiveMonoid where </> is a complete inverse of the Monoid <> operation. The class instances must satisfy the following additional laws:

(a <> b) </> a == Just b
(a <> b) </> b == Just a

class (ReductiveMonoid m, LeftGCDMonoid m, RightGCDMonoid m) => GCDMonoid m where #

Class of Abelian monoids that allow the greatest common denominator to be found for any two given values. The operations must satisfy the following laws:

gcd a b == commonPrefix a b == commonSuffix a b
Just a' = a </> p && Just b' = b </> p
   where p = gcd a b

If a GCDMonoid happens to also be a CancellativeMonoid, it should additionally satisfy the following laws:

gcd (a <> b) (a <> c) == a <> gcd b c
gcd (a <> c) (b <> c) == gcd a b <> c

Methods

gcd :: m -> m -> m #

Instances
GCDMonoid () # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: () -> () -> () #

GCDMonoid IntSet # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: IntSet -> IntSet -> IntSet #

GCDMonoid a => GCDMonoid (Dual a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: Dual a -> Dual a -> Dual a #

(Integral a, Ord a) => GCDMonoid (Sum a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: Sum a -> Sum a -> Sum a #

Integral a => GCDMonoid (Product a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: Product a -> Product a -> Product a #

Ord a => GCDMonoid (Set a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: Set a -> Set a -> Set a #

(GCDMonoid a, GCDMonoid b) => GCDMonoid (a, b) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: (a, b) -> (a, b) -> (a, b) #

(GCDMonoid a, GCDMonoid b, GCDMonoid c) => GCDMonoid (a, b, c) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: (a, b, c) -> (a, b, c) -> (a, b, c) #

(GCDMonoid a, GCDMonoid b, GCDMonoid c, GCDMonoid d) => GCDMonoid (a, b, c, d) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

gcd :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) #

Asymmetric monoid classes

class Monoid m => LeftReductiveMonoid m where #

Class of monoids with a left inverse of mappend, satisfying the following law:

isPrefixOf a b == isJust (stripPrefix a b)
maybe b (a <>) (stripPrefix a b) == b
a `isPrefixOf` (a <> b)

| Every instance definition has to implement at least the stripPrefix method. Its complexity should be no worse than linear in the length of the prefix argument.

Minimal complete definition

stripPrefix

Methods

isPrefixOf :: m -> m -> Bool #

stripPrefix :: m -> m -> Maybe m #

Instances
LeftReductiveMonoid () # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: () -> () -> Bool #

stripPrefix :: () -> () -> Maybe () #

LeftReductiveMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

LeftReductiveMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

LeftReductiveMonoid IntSet # 
Instance details

Defined in Data.Monoid.Cancellative

LeftReductiveMonoid Text # 
Instance details

Defined in Data.Monoid.Cancellative

LeftReductiveMonoid Text # 
Instance details

Defined in Data.Monoid.Cancellative

LeftReductiveMonoid ByteStringUTF8 # 
Instance details

Defined in Data.Monoid.Instances.ByteString.UTF8

Eq x => LeftReductiveMonoid [x] # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: [x] -> [x] -> Bool #

stripPrefix :: [x] -> [x] -> Maybe [x] #

LeftReductiveMonoid x => LeftReductiveMonoid (Maybe x) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: Maybe x -> Maybe x -> Bool #

stripPrefix :: Maybe x -> Maybe x -> Maybe (Maybe x) #

RightReductiveMonoid a => LeftReductiveMonoid (Dual a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: Dual a -> Dual a -> Bool #

stripPrefix :: Dual a -> Dual a -> Maybe (Dual a) #

Integral a => LeftReductiveMonoid (Sum a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: Sum a -> Sum a -> Bool #

stripPrefix :: Sum a -> Sum a -> Maybe (Sum a) #

Integral a => LeftReductiveMonoid (Product a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: Product a -> Product a -> Bool #

stripPrefix :: Product a -> Product a -> Maybe (Product a) #

LeftReductiveMonoid (IntMap a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: IntMap a -> IntMap a -> Bool #

stripPrefix :: IntMap a -> IntMap a -> Maybe (IntMap a) #

Eq a => LeftReductiveMonoid (Seq a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: Seq a -> Seq a -> Bool #

stripPrefix :: Seq a -> Seq a -> Maybe (Seq a) #

Ord a => LeftReductiveMonoid (Set a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: Set a -> Set a -> Bool #

stripPrefix :: Set a -> Set a -> Maybe (Set a) #

Eq a => LeftReductiveMonoid (Vector a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: Vector a -> Vector a -> Bool #

stripPrefix :: Vector a -> Vector a -> Maybe (Vector a) #

(StableFactorialMonoid m, TextualMonoid m, LeftReductiveMonoid m) => LeftReductiveMonoid (LinePositioned m) # 
Instance details

Defined in Data.Monoid.Instances.Positioned

(StableFactorialMonoid m, LeftReductiveMonoid m) => LeftReductiveMonoid (OffsetPositioned m) # 
Instance details

Defined in Data.Monoid.Instances.Positioned

(LeftReductiveMonoid a, StableFactorialMonoid a) => LeftReductiveMonoid (Measured a) # 
Instance details

Defined in Data.Monoid.Instances.Measured

(LeftReductiveMonoid a, StableFactorialMonoid a) => LeftReductiveMonoid (Concat a) # 
Instance details

Defined in Data.Monoid.Instances.Concat

Methods

isPrefixOf :: Concat a -> Concat a -> Bool #

stripPrefix :: Concat a -> Concat a -> Maybe (Concat a) #

(LeftReductiveMonoid a, LeftReductiveMonoid b) => LeftReductiveMonoid (a, b) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: (a, b) -> (a, b) -> Bool #

stripPrefix :: (a, b) -> (a, b) -> Maybe (a, b) #

Ord k => LeftReductiveMonoid (Map k a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: Map k a -> Map k a -> Bool #

stripPrefix :: Map k a -> Map k a -> Maybe (Map k a) #

(LeftReductiveMonoid a, LeftReductiveMonoid b) => LeftReductiveMonoid (Stateful a b) # 
Instance details

Defined in Data.Monoid.Instances.Stateful

Methods

isPrefixOf :: Stateful a b -> Stateful a b -> Bool #

stripPrefix :: Stateful a b -> Stateful a b -> Maybe (Stateful a b) #

(LeftReductiveMonoid a, LeftReductiveMonoid b, LeftReductiveMonoid c) => LeftReductiveMonoid (a, b, c) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: (a, b, c) -> (a, b, c) -> Bool #

stripPrefix :: (a, b, c) -> (a, b, c) -> Maybe (a, b, c) #

(LeftReductiveMonoid a, LeftReductiveMonoid b, LeftReductiveMonoid c, LeftReductiveMonoid d) => LeftReductiveMonoid (a, b, c, d) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isPrefixOf :: (a, b, c, d) -> (a, b, c, d) -> Bool #

stripPrefix :: (a, b, c, d) -> (a, b, c, d) -> Maybe (a, b, c, d) #

class Monoid m => RightReductiveMonoid m where #

Class of monoids with a right inverse of mappend, satisfying the following law:

isSuffixOf a b == isJust (stripSuffix a b)
maybe b (<> a) (stripSuffix a b) == b
b `isSuffixOf` (a <> b)

| Every instance definition has to implement at least the stripSuffix method. Its complexity should be no worse than linear in the length of the suffix argument.

Minimal complete definition

stripSuffix

Methods

isSuffixOf :: m -> m -> Bool #

stripSuffix :: m -> m -> Maybe m #

Instances
RightReductiveMonoid () # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: () -> () -> Bool #

stripSuffix :: () -> () -> Maybe () #

RightReductiveMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

RightReductiveMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

RightReductiveMonoid IntSet # 
Instance details

Defined in Data.Monoid.Cancellative

RightReductiveMonoid Text # 
Instance details

Defined in Data.Monoid.Cancellative

RightReductiveMonoid Text # 
Instance details

Defined in Data.Monoid.Cancellative

RightReductiveMonoid x => RightReductiveMonoid (Maybe x) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: Maybe x -> Maybe x -> Bool #

stripSuffix :: Maybe x -> Maybe x -> Maybe (Maybe x) #

LeftReductiveMonoid a => RightReductiveMonoid (Dual a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: Dual a -> Dual a -> Bool #

stripSuffix :: Dual a -> Dual a -> Maybe (Dual a) #

Integral a => RightReductiveMonoid (Sum a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: Sum a -> Sum a -> Bool #

stripSuffix :: Sum a -> Sum a -> Maybe (Sum a) #

Integral a => RightReductiveMonoid (Product a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: Product a -> Product a -> Bool #

stripSuffix :: Product a -> Product a -> Maybe (Product a) #

Eq a => RightReductiveMonoid (Seq a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: Seq a -> Seq a -> Bool #

stripSuffix :: Seq a -> Seq a -> Maybe (Seq a) #

Ord a => RightReductiveMonoid (Set a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: Set a -> Set a -> Bool #

stripSuffix :: Set a -> Set a -> Maybe (Set a) #

Eq a => RightReductiveMonoid (Vector a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: Vector a -> Vector a -> Bool #

stripSuffix :: Vector a -> Vector a -> Maybe (Vector a) #

(StableFactorialMonoid m, TextualMonoid m, RightReductiveMonoid m) => RightReductiveMonoid (LinePositioned m) # 
Instance details

Defined in Data.Monoid.Instances.Positioned

(StableFactorialMonoid m, RightReductiveMonoid m) => RightReductiveMonoid (OffsetPositioned m) # 
Instance details

Defined in Data.Monoid.Instances.Positioned

(RightReductiveMonoid a, StableFactorialMonoid a) => RightReductiveMonoid (Measured a) # 
Instance details

Defined in Data.Monoid.Instances.Measured

(RightReductiveMonoid a, StableFactorialMonoid a) => RightReductiveMonoid (Concat a) # 
Instance details

Defined in Data.Monoid.Instances.Concat

Methods

isSuffixOf :: Concat a -> Concat a -> Bool #

stripSuffix :: Concat a -> Concat a -> Maybe (Concat a) #

(RightReductiveMonoid a, RightReductiveMonoid b) => RightReductiveMonoid (a, b) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: (a, b) -> (a, b) -> Bool #

stripSuffix :: (a, b) -> (a, b) -> Maybe (a, b) #

(RightReductiveMonoid a, RightReductiveMonoid b) => RightReductiveMonoid (Stateful a b) # 
Instance details

Defined in Data.Monoid.Instances.Stateful

Methods

isSuffixOf :: Stateful a b -> Stateful a b -> Bool #

stripSuffix :: Stateful a b -> Stateful a b -> Maybe (Stateful a b) #

(RightReductiveMonoid a, RightReductiveMonoid b, RightReductiveMonoid c) => RightReductiveMonoid (a, b, c) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: (a, b, c) -> (a, b, c) -> Bool #

stripSuffix :: (a, b, c) -> (a, b, c) -> Maybe (a, b, c) #

(RightReductiveMonoid a, RightReductiveMonoid b, RightReductiveMonoid c, RightReductiveMonoid d) => RightReductiveMonoid (a, b, c, d) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

isSuffixOf :: (a, b, c, d) -> (a, b, c, d) -> Bool #

stripSuffix :: (a, b, c, d) -> (a, b, c, d) -> Maybe (a, b, c, d) #

class LeftReductiveMonoid m => LeftCancellativeMonoid m #

Subclass of LeftReductiveMonoid where stripPrefix is a complete inverse of <>, satisfying the following additional law:

stripPrefix a (a <> b) == Just b
Instances
LeftCancellativeMonoid () # 
Instance details

Defined in Data.Monoid.Cancellative

LeftCancellativeMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

LeftCancellativeMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

LeftCancellativeMonoid Text # 
Instance details

Defined in Data.Monoid.Cancellative

LeftCancellativeMonoid Text # 
Instance details

Defined in Data.Monoid.Cancellative

LeftCancellativeMonoid ByteStringUTF8 # 
Instance details

Defined in Data.Monoid.Instances.ByteString.UTF8

Eq x => LeftCancellativeMonoid [x] # 
Instance details

Defined in Data.Monoid.Cancellative

RightCancellativeMonoid a => LeftCancellativeMonoid (Dual a) # 
Instance details

Defined in Data.Monoid.Cancellative

Integral a => LeftCancellativeMonoid (Sum a) # 
Instance details

Defined in Data.Monoid.Cancellative

Eq a => LeftCancellativeMonoid (Seq a) # 
Instance details

Defined in Data.Monoid.Cancellative

Eq a => LeftCancellativeMonoid (Vector a) # 
Instance details

Defined in Data.Monoid.Cancellative

(LeftCancellativeMonoid a, LeftCancellativeMonoid b) => LeftCancellativeMonoid (a, b) # 
Instance details

Defined in Data.Monoid.Cancellative

(LeftCancellativeMonoid a, LeftCancellativeMonoid b, LeftCancellativeMonoid c) => LeftCancellativeMonoid (a, b, c) # 
Instance details

Defined in Data.Monoid.Cancellative

(LeftCancellativeMonoid a, LeftCancellativeMonoid b, LeftCancellativeMonoid c, LeftCancellativeMonoid d) => LeftCancellativeMonoid (a, b, c, d) # 
Instance details

Defined in Data.Monoid.Cancellative

class RightReductiveMonoid m => RightCancellativeMonoid m #

Subclass of LeftReductiveMonoid where stripPrefix is a complete inverse of <>, satisfying the following additional law:

stripSuffix b (a <> b) == Just a

class LeftReductiveMonoid m => LeftGCDMonoid m where #

Class of monoids capable of finding the equivalent of greatest common divisor on the left side of two monoidal values. The methods' complexity should be no worse than linear in the length of the common prefix. The following laws must be respected:

stripCommonPrefix a b == (p, a', b')
   where p = commonPrefix a b
         Just a' = stripPrefix p a
         Just b' = stripPrefix p b
p == commonPrefix a b && p <> a' == a && p <> b' == b
   where (p, a', b') = stripCommonPrefix a b

Minimal complete definition

commonPrefix | stripCommonPrefix

Methods

commonPrefix :: m -> m -> m #

stripCommonPrefix :: m -> m -> (m, m, m) #

Instances
LeftGCDMonoid () # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: () -> () -> () #

stripCommonPrefix :: () -> () -> ((), (), ()) #

LeftGCDMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

LeftGCDMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

LeftGCDMonoid IntSet # 
Instance details

Defined in Data.Monoid.Cancellative

LeftGCDMonoid Text # 
Instance details

Defined in Data.Monoid.Cancellative

LeftGCDMonoid Text # 
Instance details

Defined in Data.Monoid.Cancellative

LeftGCDMonoid ByteStringUTF8 # 
Instance details

Defined in Data.Monoid.Instances.ByteString.UTF8

Eq x => LeftGCDMonoid [x] # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: [x] -> [x] -> [x] #

stripCommonPrefix :: [x] -> [x] -> ([x], [x], [x]) #

LeftGCDMonoid x => LeftGCDMonoid (Maybe x) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: Maybe x -> Maybe x -> Maybe x #

stripCommonPrefix :: Maybe x -> Maybe x -> (Maybe x, Maybe x, Maybe x) #

RightGCDMonoid a => LeftGCDMonoid (Dual a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: Dual a -> Dual a -> Dual a #

stripCommonPrefix :: Dual a -> Dual a -> (Dual a, Dual a, Dual a) #

(Integral a, Ord a) => LeftGCDMonoid (Sum a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: Sum a -> Sum a -> Sum a #

stripCommonPrefix :: Sum a -> Sum a -> (Sum a, Sum a, Sum a) #

Integral a => LeftGCDMonoid (Product a) # 
Instance details

Defined in Data.Monoid.Cancellative

Eq a => LeftGCDMonoid (IntMap a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: IntMap a -> IntMap a -> IntMap a #

stripCommonPrefix :: IntMap a -> IntMap a -> (IntMap a, IntMap a, IntMap a) #

Eq a => LeftGCDMonoid (Seq a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: Seq a -> Seq a -> Seq a #

stripCommonPrefix :: Seq a -> Seq a -> (Seq a, Seq a, Seq a) #

Ord a => LeftGCDMonoid (Set a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: Set a -> Set a -> Set a #

stripCommonPrefix :: Set a -> Set a -> (Set a, Set a, Set a) #

Eq a => LeftGCDMonoid (Vector a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: Vector a -> Vector a -> Vector a #

stripCommonPrefix :: Vector a -> Vector a -> (Vector a, Vector a, Vector a) #

(StableFactorialMonoid m, TextualMonoid m, LeftGCDMonoid m) => LeftGCDMonoid (LinePositioned m) # 
Instance details

Defined in Data.Monoid.Instances.Positioned

(StableFactorialMonoid m, LeftGCDMonoid m) => LeftGCDMonoid (OffsetPositioned m) # 
Instance details

Defined in Data.Monoid.Instances.Positioned

(LeftGCDMonoid a, StableFactorialMonoid a) => LeftGCDMonoid (Measured a) # 
Instance details

Defined in Data.Monoid.Instances.Measured

(LeftGCDMonoid a, StableFactorialMonoid a) => LeftGCDMonoid (Concat a) # 
Instance details

Defined in Data.Monoid.Instances.Concat

Methods

commonPrefix :: Concat a -> Concat a -> Concat a #

stripCommonPrefix :: Concat a -> Concat a -> (Concat a, Concat a, Concat a) #

(LeftGCDMonoid a, LeftGCDMonoid b) => LeftGCDMonoid (a, b) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: (a, b) -> (a, b) -> (a, b) #

stripCommonPrefix :: (a, b) -> (a, b) -> ((a, b), (a, b), (a, b)) #

(Ord k, Eq a) => LeftGCDMonoid (Map k a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: Map k a -> Map k a -> Map k a #

stripCommonPrefix :: Map k a -> Map k a -> (Map k a, Map k a, Map k a) #

(LeftGCDMonoid a, LeftGCDMonoid b) => LeftGCDMonoid (Stateful a b) # 
Instance details

Defined in Data.Monoid.Instances.Stateful

Methods

commonPrefix :: Stateful a b -> Stateful a b -> Stateful a b #

stripCommonPrefix :: Stateful a b -> Stateful a b -> (Stateful a b, Stateful a b, Stateful a b) #

(LeftGCDMonoid a, LeftGCDMonoid b, LeftGCDMonoid c) => LeftGCDMonoid (a, b, c) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: (a, b, c) -> (a, b, c) -> (a, b, c) #

stripCommonPrefix :: (a, b, c) -> (a, b, c) -> ((a, b, c), (a, b, c), (a, b, c)) #

(LeftGCDMonoid a, LeftGCDMonoid b, LeftGCDMonoid c, LeftGCDMonoid d) => LeftGCDMonoid (a, b, c, d) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonPrefix :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) #

stripCommonPrefix :: (a, b, c, d) -> (a, b, c, d) -> ((a, b, c, d), (a, b, c, d), (a, b, c, d)) #

class RightReductiveMonoid m => RightGCDMonoid m where #

Class of monoids capable of finding the equivalent of greatest common divisor on the right side of two monoidal values. The methods' complexity must be no worse than linear in the length of the common suffix. The following laws must be respected:

stripCommonSuffix a b == (a', b', s)
   where s = commonSuffix a b
         Just a' = stripSuffix p a
         Just b' = stripSuffix p b
s == commonSuffix a b && a' <> s == a && b' <> s == b
   where (a', b', s) = stripCommonSuffix a b

Minimal complete definition

commonSuffix | stripCommonSuffix

Methods

commonSuffix :: m -> m -> m #

stripCommonSuffix :: m -> m -> (m, m, m) #

Instances
RightGCDMonoid () # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: () -> () -> () #

stripCommonSuffix :: () -> () -> ((), (), ()) #

RightGCDMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

RightGCDMonoid ByteString # 
Instance details

Defined in Data.Monoid.Cancellative

RightGCDMonoid IntSet # 
Instance details

Defined in Data.Monoid.Cancellative

RightGCDMonoid x => RightGCDMonoid (Maybe x) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: Maybe x -> Maybe x -> Maybe x #

stripCommonSuffix :: Maybe x -> Maybe x -> (Maybe x, Maybe x, Maybe x) #

LeftGCDMonoid a => RightGCDMonoid (Dual a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: Dual a -> Dual a -> Dual a #

stripCommonSuffix :: Dual a -> Dual a -> (Dual a, Dual a, Dual a) #

(Integral a, Ord a) => RightGCDMonoid (Sum a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: Sum a -> Sum a -> Sum a #

stripCommonSuffix :: Sum a -> Sum a -> (Sum a, Sum a, Sum a) #

Integral a => RightGCDMonoid (Product a) # 
Instance details

Defined in Data.Monoid.Cancellative

Eq a => RightGCDMonoid (Seq a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: Seq a -> Seq a -> Seq a #

stripCommonSuffix :: Seq a -> Seq a -> (Seq a, Seq a, Seq a) #

Ord a => RightGCDMonoid (Set a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: Set a -> Set a -> Set a #

stripCommonSuffix :: Set a -> Set a -> (Set a, Set a, Set a) #

Eq a => RightGCDMonoid (Vector a) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: Vector a -> Vector a -> Vector a #

stripCommonSuffix :: Vector a -> Vector a -> (Vector a, Vector a, Vector a) #

(StableFactorialMonoid m, TextualMonoid m, RightGCDMonoid m) => RightGCDMonoid (LinePositioned m) # 
Instance details

Defined in Data.Monoid.Instances.Positioned

(StableFactorialMonoid m, RightGCDMonoid m) => RightGCDMonoid (OffsetPositioned m) # 
Instance details

Defined in Data.Monoid.Instances.Positioned

(RightGCDMonoid a, StableFactorialMonoid a) => RightGCDMonoid (Measured a) # 
Instance details

Defined in Data.Monoid.Instances.Measured

(RightGCDMonoid a, StableFactorialMonoid a) => RightGCDMonoid (Concat a) # 
Instance details

Defined in Data.Monoid.Instances.Concat

Methods

commonSuffix :: Concat a -> Concat a -> Concat a #

stripCommonSuffix :: Concat a -> Concat a -> (Concat a, Concat a, Concat a) #

(RightGCDMonoid a, RightGCDMonoid b) => RightGCDMonoid (a, b) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: (a, b) -> (a, b) -> (a, b) #

stripCommonSuffix :: (a, b) -> (a, b) -> ((a, b), (a, b), (a, b)) #

(RightGCDMonoid a, RightGCDMonoid b) => RightGCDMonoid (Stateful a b) # 
Instance details

Defined in Data.Monoid.Instances.Stateful

Methods

commonSuffix :: Stateful a b -> Stateful a b -> Stateful a b #

stripCommonSuffix :: Stateful a b -> Stateful a b -> (Stateful a b, Stateful a b, Stateful a b) #

(RightGCDMonoid a, RightGCDMonoid b, RightGCDMonoid c) => RightGCDMonoid (a, b, c) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: (a, b, c) -> (a, b, c) -> (a, b, c) #

stripCommonSuffix :: (a, b, c) -> (a, b, c) -> ((a, b, c), (a, b, c), (a, b, c)) #

(RightGCDMonoid a, RightGCDMonoid b, RightGCDMonoid c, RightGCDMonoid d) => RightGCDMonoid (a, b, c, d) # 
Instance details

Defined in Data.Monoid.Cancellative

Methods

commonSuffix :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) #

stripCommonSuffix :: (a, b, c, d) -> (a, b, c, d) -> ((a, b, c, d), (a, b, c, d), (a, b, c, d)) #