HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulemonoid-subclasses-1.2.5.1Haskell2010

Data.Monoid.Monus

This module defines the OverlappingGCDMonoid => Monus subclass of the Monoid class.

  • 2 classes
classclass (Commutative m, Monoid m, OverlappingGCDMonoid m) => Monus m where
#

Class of Abelian monoids with monus. The monus operation <\> is a synonym for both stripPrefixOverlap and stripSuffixOverlap, which must be equivalent as <> is both associative and commutative:

(<\>) = flip stripPrefixOverlap
(<\>) = flip stripSuffixOverlap

Methods

  • (<\>) :: m -> m -> minfix 5
Instances10Monus, …
  • Monus IntSetDefined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus

    O(m+n)

  • Monus ()Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus

    O(1)

  • Ord a => Monus (Set a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus

    O(m*log(nm + 1)), m <= n/

  • Monus (Product Natural)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus

    O(1)

  • Monus (Sum Natural)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus

    O(1)

  • Monus a => Monus (Dual a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus
  • (Monus a, MonoidNull a) => Monus (Maybe a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus
  • (Monus a, Monus b) => Monus (a, b)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus
  • (Monus a, Monus b, Monus c) => Monus (a, b, c)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus
  • (Monus a, Monus b, Monus c, Monus d) => Monus (a, b, c, d)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Monus
classclass (Monoid m, LeftReductive m, RightReductive m) => OverlappingGCDMonoid m where
#

Class of monoids for which the greatest overlap can be found between any two values, such that

a == a' <> overlap a b
b == overlap a b <> b'

The methods must satisfy the following laws:

stripOverlap a b == (stripSuffixOverlap b a, overlap a b, stripPrefixOverlap a b)
stripSuffixOverlap b a <> overlap a b == a
overlap a b <> stripPrefixOverlap a b == b

The result of overlap a b must be the largest prefix of b and suffix of a, in the sense that it contains any other value x that satifies the property (x isPrefixOf b) && (x isSuffixOf a):

∀x. (x `isPrefixOf` b && x `isSuffixOf` a) => (x `isPrefixOf` overlap a b && x `isSuffixOf` overlap a b)

and it must be unique so there's no other value y that satisfies the same properties for every such x:

∀y. ((∀x. (x `isPrefixOf` b && x `isSuffixOf` a) => x `isPrefixOf` y && x `isSuffixOf` y) => y == overlap a b)

In addition, the overlap operation must satisfy the following properties:

Idempotence

overlap a a == a

Identity

overlap mempty a == mempty
overlap a mempty == mempty

Methods

Instances19OverlappingGCDMonoid, …