HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Modulemonoid-extras-0.6.2Haskell2010

Data.Monoid.Deletable

A monoid transformer that allows deleting information from a concatenation of monoidal values.

  • 1 type
  • 4 values
datadata Deletable m
#

If m is a Monoid, then Deletable m (intuitively speaking) adds two distinguished new elements [ and ], such that an occurrence of [ "deletes" everything from it to the next ]. For example,

abc[def]gh == abcgh

This is all you really need to know to use Deletable m values; to understand the actual implementation, read on.

To properly deal with nesting and associativity we need to be able to assign meanings to things like [[, ][, and so on. (We cannot just define, say, [[ == [, since then ([[)] == [] == id but [([]) == [id == [.) Formally, elements of Deletable m are triples of the form (r, m, l) representing words ]^r m [^l. When combining two triples (r1, m1, l1) and (r2, m2, l2) there are three cases:

  • If l1 == r2 then the [s from the left and ]s from the right exactly cancel, and we are left with (r1, m1 <> m2, l2).

  • If l1 < r2 then all of the [s cancel with some of the ]s, but m1 is still inside the remaining ]s and is deleted, yielding (r1 + r2 - l1, m2, l2)

  • The remaining case is symmetric with the second.

Constructors

Instances8Functor, Foldable, Traversable, Data, Read, Show, …
valuedeleteL :: Monoid m => Deletable m
#

A "left bracket", which causes everything between it and the next right bracket to be deleted.

valuedeleteR :: Monoid m => Deletable m
#

A "right bracket", denoting the end of the section that should be deleted.