monoid-subclasses-0.4.6.1: Subclasses of Monoid

Data.Monoid.Cancellative

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:

• LeftReductiveMonoid
• LeftCancellativeMonoid
• LeftGCDMonoid
• RightReductiveMonoid
• RightCancellativeMonoid
• RightGCDMonoid
Synopsis

# Symmetric, commutative monoid classes

class Monoid m => CommutativeMonoid m Source #

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

a <> b == b <> a
Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Num a => CommutativeMonoid (Sum a) Source # Instance detailsDefined in Data.Monoid.Cancellative Num a => CommutativeMonoid (Product a) Source # Instance detailsDefined in Data.Monoid.Cancellative Ord a => CommutativeMonoid (Set a) Source # Instance detailsDefined in Data.Monoid.Cancellative (CommutativeMonoid a, CommutativeMonoid b) => CommutativeMonoid (a, b) Source # Instance detailsDefined in Data.Monoid.Cancellative (CommutativeMonoid a, CommutativeMonoid b, CommutativeMonoid c) => CommutativeMonoid (a, b, c) Source # Instance detailsDefined in Data.Monoid.Cancellative (CommutativeMonoid a, CommutativeMonoid b, CommutativeMonoid c, CommutativeMonoid d) => CommutativeMonoid (a, b, c, d) Source # Instance detailsDefined in Data.Monoid.Cancellative

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

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

Minimal complete definition

(</>)

Methods

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

Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative Methods() :: () -> () -> Maybe () Source # Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods() :: Dual a -> Dual a -> Maybe (Dual a) Source # Integral a => ReductiveMonoid (Sum a) Source # Instance detailsDefined in Data.Monoid.Cancellative Methods() :: Sum a -> Sum a -> Maybe (Sum a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative Methods() :: Product a -> Product a -> Maybe (Product a) Source # Ord a => ReductiveMonoid (Set a) Source # Instance detailsDefined in Data.Monoid.Cancellative Methods() :: Set a -> Set a -> Maybe (Set a) Source # (ReductiveMonoid a, ReductiveMonoid b) => ReductiveMonoid (a, b) Source # Instance detailsDefined in Data.Monoid.Cancellative Methods() :: (a, b) -> (a, b) -> Maybe (a, b) Source # (ReductiveMonoid a, ReductiveMonoid b, ReductiveMonoid c) => ReductiveMonoid (a, b, c) Source # Instance detailsDefined in Data.Monoid.Cancellative Methods() :: (a, b, c) -> (a, b, c) -> Maybe (a, b, c) Source # (ReductiveMonoid a, ReductiveMonoid b, ReductiveMonoid c, ReductiveMonoid d) => ReductiveMonoid (a, b, c, d) Source # Instance detailsDefined in Data.Monoid.Cancellative Methods() :: (a, b, c, d) -> (a, b, c, d) -> Maybe (a, b, c, d) Source #

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
Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative (CancellativeMonoid a, CancellativeMonoid b) => CancellativeMonoid (a, b) Source # Instance detailsDefined in Data.Monoid.Cancellative (CancellativeMonoid a, CancellativeMonoid b, CancellativeMonoid c) => CancellativeMonoid (a, b, c) Source # Instance detailsDefined in Data.Monoid.Cancellative (CancellativeMonoid a, CancellativeMonoid b, CancellativeMonoid c, CancellativeMonoid d) => CancellativeMonoid (a, b, c, d) Source # Instance detailsDefined in Data.Monoid.Cancellative

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

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

Minimal complete definition

gcd

Methods

gcd :: m -> m -> m Source #

Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative Methodsgcd :: () -> () -> () Source # Source # Instance detailsDefined in Data.Monoid.Cancellative Methods GCDMonoid a => GCDMonoid (Dual a) Source # Instance detailsDefined in Data.Monoid.Cancellative Methodsgcd :: Dual a -> Dual a -> Dual a Source # (Integral a, Ord a) => GCDMonoid (Sum a) Source # Instance detailsDefined in Data.Monoid.Cancellative Methodsgcd :: Sum a -> Sum a -> Sum a Source # Integral a => GCDMonoid (Product a) Source # Instance detailsDefined in Data.Monoid.Cancellative Methodsgcd :: Product a -> Product a -> Product a Source # Ord a => GCDMonoid (Set a) Source # Instance detailsDefined in Data.Monoid.Cancellative Methodsgcd :: Set a -> Set a -> Set a Source # (GCDMonoid a, GCDMonoid b) => GCDMonoid (a, b) Source # Instance detailsDefined in Data.Monoid.Cancellative Methodsgcd :: (a, b) -> (a, b) -> (a, b) Source # (GCDMonoid a, GCDMonoid b, GCDMonoid c) => GCDMonoid (a, b, c) Source # Instance detailsDefined in Data.Monoid.Cancellative Methodsgcd :: (a, b, c) -> (a, b, c) -> (a, b, c) Source # (GCDMonoid a, GCDMonoid b, GCDMonoid c, GCDMonoid d) => GCDMonoid (a, b, c, d) Source # Instance detailsDefined in Data.Monoid.Cancellative Methodsgcd :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Source #

# Asymmetric monoid classes

class Monoid m => LeftReductiveMonoid m where Source #

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 Source #

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

Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: () -> () -> Bool Source #stripPrefix :: () -> () -> Maybe () Source # Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Instances.ByteString.UTF8 Methods Eq x => LeftReductiveMonoid [x] Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: [x] -> [x] -> Bool Source #stripPrefix :: [x] -> [x] -> Maybe [x] Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: Maybe x -> Maybe x -> Bool Source #stripPrefix :: Maybe x -> Maybe x -> Maybe (Maybe x) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: Dual a -> Dual a -> Bool Source #stripPrefix :: Dual a -> Dual a -> Maybe (Dual a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: Sum a -> Sum a -> Bool Source #stripPrefix :: Sum a -> Sum a -> Maybe (Sum a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: Product a -> Product a -> Bool Source #stripPrefix :: Product a -> Product a -> Maybe (Product a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: IntMap a -> IntMap a -> Bool Source #stripPrefix :: IntMap a -> IntMap a -> Maybe (IntMap a) Source # Eq a => LeftReductiveMonoid (Seq a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: Seq a -> Seq a -> Bool Source #stripPrefix :: Seq a -> Seq a -> Maybe (Seq a) Source # Ord a => LeftReductiveMonoid (Set a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: Set a -> Set a -> Bool Source #stripPrefix :: Set a -> Set a -> Maybe (Set a) Source # Eq a => LeftReductiveMonoid (Vector a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: Vector a -> Vector a -> Bool Source #stripPrefix :: Vector a -> Vector a -> Maybe (Vector a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Positioned Methods Source # Instance detailsDefined in Data.Monoid.Instances.Positioned Methods Source # Instance detailsDefined in Data.Monoid.Instances.Measured MethodsisPrefixOf :: Measured a -> Measured a -> Bool Source #stripPrefix :: Measured a -> Measured a -> Maybe (Measured a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Concat MethodsisPrefixOf :: Concat a -> Concat a -> Bool Source #stripPrefix :: Concat a -> Concat a -> Maybe (Concat a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: (a, b) -> (a, b) -> Bool Source #stripPrefix :: (a, b) -> (a, b) -> Maybe (a, b) Source # Ord k => LeftReductiveMonoid (Map k a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: Map k a -> Map k a -> Bool Source #stripPrefix :: Map k a -> Map k a -> Maybe (Map k a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Stateful MethodsisPrefixOf :: Stateful a b -> Stateful a b -> Bool Source #stripPrefix :: Stateful a b -> Stateful a b -> Maybe (Stateful a b) Source # (LeftReductiveMonoid a, LeftReductiveMonoid b, LeftReductiveMonoid c) => LeftReductiveMonoid (a, b, c) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: (a, b, c) -> (a, b, c) -> Bool Source #stripPrefix :: (a, b, c) -> (a, b, c) -> Maybe (a, b, c) Source # (LeftReductiveMonoid a, LeftReductiveMonoid b, LeftReductiveMonoid c, LeftReductiveMonoid d) => LeftReductiveMonoid (a, b, c, d) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisPrefixOf :: (a, b, c, d) -> (a, b, c, d) -> Bool Source #stripPrefix :: (a, b, c, d) -> (a, b, c, d) -> Maybe (a, b, c, d) Source #

class Monoid m => RightReductiveMonoid m where Source #

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 Source #

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

Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: () -> () -> Bool Source #stripSuffix :: () -> () -> Maybe () Source # Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: Maybe x -> Maybe x -> Bool Source #stripSuffix :: Maybe x -> Maybe x -> Maybe (Maybe x) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: Dual a -> Dual a -> Bool Source #stripSuffix :: Dual a -> Dual a -> Maybe (Dual a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: Sum a -> Sum a -> Bool Source #stripSuffix :: Sum a -> Sum a -> Maybe (Sum a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: Product a -> Product a -> Bool Source #stripSuffix :: Product a -> Product a -> Maybe (Product a) Source # Eq a => RightReductiveMonoid (Seq a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: Seq a -> Seq a -> Bool Source #stripSuffix :: Seq a -> Seq a -> Maybe (Seq a) Source # Ord a => RightReductiveMonoid (Set a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: Set a -> Set a -> Bool Source #stripSuffix :: Set a -> Set a -> Maybe (Set a) Source # Eq a => RightReductiveMonoid (Vector a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: Vector a -> Vector a -> Bool Source #stripSuffix :: Vector a -> Vector a -> Maybe (Vector a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Positioned Methods Source # Instance detailsDefined in Data.Monoid.Instances.Positioned Methods Source # Instance detailsDefined in Data.Monoid.Instances.Measured MethodsisSuffixOf :: Measured a -> Measured a -> Bool Source #stripSuffix :: Measured a -> Measured a -> Maybe (Measured a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Concat MethodsisSuffixOf :: Concat a -> Concat a -> Bool Source #stripSuffix :: Concat a -> Concat a -> Maybe (Concat a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: (a, b) -> (a, b) -> Bool Source #stripSuffix :: (a, b) -> (a, b) -> Maybe (a, b) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Stateful MethodsisSuffixOf :: Stateful a b -> Stateful a b -> Bool Source #stripSuffix :: Stateful a b -> Stateful a b -> Maybe (Stateful a b) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: (a, b, c) -> (a, b, c) -> Bool Source #stripSuffix :: (a, b, c) -> (a, b, c) -> Maybe (a, b, c) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsisSuffixOf :: (a, b, c, d) -> (a, b, c, d) -> Bool Source #stripSuffix :: (a, b, c, d) -> (a, b, c, d) -> Maybe (a, b, c, d) Source #

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

stripPrefix a (a <> b) == Just b
Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Instances.ByteString.UTF8 Eq x => LeftCancellativeMonoid [x] Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Eq a => LeftCancellativeMonoid (Seq a) Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative

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

stripSuffix b (a <> b) == Just a
Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Eq a => RightCancellativeMonoid (Seq a) Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative Source # Instance detailsDefined in Data.Monoid.Cancellative

class LeftReductiveMonoid m => LeftGCDMonoid m where Source #

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

Methods

commonPrefix :: m -> m -> m Source #

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

Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: () -> () -> () Source #stripCommonPrefix :: () -> () -> ((), (), ()) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsstripCommonPrefix :: Text -> Text -> (Text, Text, Text) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodsstripCommonPrefix :: Text -> Text -> (Text, Text, Text) Source # Source # Instance detailsDefined in Data.Monoid.Instances.ByteString.UTF8 Methods Eq x => LeftGCDMonoid [x] Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: [x] -> [x] -> [x] Source #stripCommonPrefix :: [x] -> [x] -> ([x], [x], [x]) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: Maybe x -> Maybe x -> Maybe x Source #stripCommonPrefix :: Maybe x -> Maybe x -> (Maybe x, Maybe x, Maybe x) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: Dual a -> Dual a -> Dual a Source #stripCommonPrefix :: Dual a -> Dual a -> (Dual a, Dual a, Dual a) Source # (Integral a, Ord a) => LeftGCDMonoid (Sum a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: Sum a -> Sum a -> Sum a Source #stripCommonPrefix :: Sum a -> Sum a -> (Sum a, Sum a, Sum a) Source # Integral a => LeftGCDMonoid (Product a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: Product a -> Product a -> Product a Source #stripCommonPrefix :: Product a -> Product a -> (Product a, Product a, Product a) Source # Eq a => LeftGCDMonoid (IntMap a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: IntMap a -> IntMap a -> IntMap a Source #stripCommonPrefix :: IntMap a -> IntMap a -> (IntMap a, IntMap a, IntMap a) Source # Eq a => LeftGCDMonoid (Seq a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: Seq a -> Seq a -> Seq a Source #stripCommonPrefix :: Seq a -> Seq a -> (Seq a, Seq a, Seq a) Source # Ord a => LeftGCDMonoid (Set a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: Set a -> Set a -> Set a Source #stripCommonPrefix :: Set a -> Set a -> (Set a, Set a, Set a) Source # Eq a => LeftGCDMonoid (Vector a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: Vector a -> Vector a -> Vector a Source #stripCommonPrefix :: Vector a -> Vector a -> (Vector a, Vector a, Vector a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Positioned Methods Source # Instance detailsDefined in Data.Monoid.Instances.Positioned Methods Source # Instance detailsDefined in Data.Monoid.Instances.Measured MethodscommonPrefix :: Measured a -> Measured a -> Measured a Source #stripCommonPrefix :: Measured a -> Measured a -> (Measured a, Measured a, Measured a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Concat MethodscommonPrefix :: Concat a -> Concat a -> Concat a Source #stripCommonPrefix :: Concat a -> Concat a -> (Concat a, Concat a, Concat a) Source # (LeftGCDMonoid a, LeftGCDMonoid b) => LeftGCDMonoid (a, b) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: (a, b) -> (a, b) -> (a, b) Source #stripCommonPrefix :: (a, b) -> (a, b) -> ((a, b), (a, b), (a, b)) Source # (Ord k, Eq a) => LeftGCDMonoid (Map k a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: Map k a -> Map k a -> Map k a Source #stripCommonPrefix :: Map k a -> Map k a -> (Map k a, Map k a, Map k a) Source # (LeftGCDMonoid a, LeftGCDMonoid b) => LeftGCDMonoid (Stateful a b) Source # Instance detailsDefined in Data.Monoid.Instances.Stateful MethodscommonPrefix :: Stateful a b -> Stateful a b -> Stateful a b Source #stripCommonPrefix :: Stateful a b -> Stateful a b -> (Stateful a b, Stateful a b, Stateful a b) Source # (LeftGCDMonoid a, LeftGCDMonoid b, LeftGCDMonoid c) => LeftGCDMonoid (a, b, c) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: (a, b, c) -> (a, b, c) -> (a, b, c) Source #stripCommonPrefix :: (a, b, c) -> (a, b, c) -> ((a, b, c), (a, b, c), (a, b, c)) Source # (LeftGCDMonoid a, LeftGCDMonoid b, LeftGCDMonoid c, LeftGCDMonoid d) => LeftGCDMonoid (a, b, c, d) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonPrefix :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Source #stripCommonPrefix :: (a, b, c, d) -> (a, b, c, d) -> ((a, b, c, d), (a, b, c, d), (a, b, c, d)) Source #

class RightReductiveMonoid m => RightGCDMonoid m where Source #

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

Methods

commonSuffix :: m -> m -> m Source #

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

Instances
 Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: () -> () -> () Source #stripCommonSuffix :: () -> () -> ((), (), ()) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative Methods Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: Maybe x -> Maybe x -> Maybe x Source #stripCommonSuffix :: Maybe x -> Maybe x -> (Maybe x, Maybe x, Maybe x) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: Dual a -> Dual a -> Dual a Source #stripCommonSuffix :: Dual a -> Dual a -> (Dual a, Dual a, Dual a) Source # (Integral a, Ord a) => RightGCDMonoid (Sum a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: Sum a -> Sum a -> Sum a Source #stripCommonSuffix :: Sum a -> Sum a -> (Sum a, Sum a, Sum a) Source # Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: Product a -> Product a -> Product a Source #stripCommonSuffix :: Product a -> Product a -> (Product a, Product a, Product a) Source # Eq a => RightGCDMonoid (Seq a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: Seq a -> Seq a -> Seq a Source #stripCommonSuffix :: Seq a -> Seq a -> (Seq a, Seq a, Seq a) Source # Ord a => RightGCDMonoid (Set a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: Set a -> Set a -> Set a Source #stripCommonSuffix :: Set a -> Set a -> (Set a, Set a, Set a) Source # Eq a => RightGCDMonoid (Vector a) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: Vector a -> Vector a -> Vector a Source #stripCommonSuffix :: Vector a -> Vector a -> (Vector a, Vector a, Vector a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Positioned Methods Source # Instance detailsDefined in Data.Monoid.Instances.Positioned Methods Source # Instance detailsDefined in Data.Monoid.Instances.Measured MethodscommonSuffix :: Measured a -> Measured a -> Measured a Source #stripCommonSuffix :: Measured a -> Measured a -> (Measured a, Measured a, Measured a) Source # Source # Instance detailsDefined in Data.Monoid.Instances.Concat MethodscommonSuffix :: Concat a -> Concat a -> Concat a Source #stripCommonSuffix :: Concat a -> Concat a -> (Concat a, Concat a, Concat a) Source # (RightGCDMonoid a, RightGCDMonoid b) => RightGCDMonoid (a, b) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: (a, b) -> (a, b) -> (a, b) Source #stripCommonSuffix :: (a, b) -> (a, b) -> ((a, b), (a, b), (a, b)) Source # (RightGCDMonoid a, RightGCDMonoid b) => RightGCDMonoid (Stateful a b) Source # Instance detailsDefined in Data.Monoid.Instances.Stateful MethodscommonSuffix :: Stateful a b -> Stateful a b -> Stateful a b Source #stripCommonSuffix :: Stateful a b -> Stateful a b -> (Stateful a b, Stateful a b, Stateful a b) Source # (RightGCDMonoid a, RightGCDMonoid b, RightGCDMonoid c) => RightGCDMonoid (a, b, c) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: (a, b, c) -> (a, b, c) -> (a, b, c) Source #stripCommonSuffix :: (a, b, c) -> (a, b, c) -> ((a, b, c), (a, b, c), (a, b, c)) Source # (RightGCDMonoid a, RightGCDMonoid b, RightGCDMonoid c, RightGCDMonoid d) => RightGCDMonoid (a, b, c, d) Source # Instance detailsDefined in Data.Monoid.Cancellative MethodscommonSuffix :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Source #stripCommonSuffix :: (a, b, c, d) -> (a, b, c, d) -> ((a, b, c, d), (a, b, c, d), (a, b, c, d)) Source #