weighted-regexp-0.3.1: Weighted Regular Expression Matcher

Stability experimental Sebastian Fischer

Data.Semiring

Description

This library provides a type class for semirings and instances for standard data types.

Synopsis

# Documentation

class Eq s => Semiring s whereSource

A semiring is an additive commutative monoid with identity `zero`:

```         a .+. b  ==  b .+. a
zero .+. a  ==  a
(a .+. b) .+. c  ==  a .+. (b .+. c)
```

A semiring is a multiplicative monoid with identity `one`:

```        one .*. a  ==  a
a .*. one  ==  a
(a .*. b) .*. c  ==  a .*. (b .*. c)
```

``` a .*. (b .+. c)  ==  (a .*. b) .+. (a .*. c)
(a .+. b) .*. c  ==  (a .*. c) .+. (b .*. c)
```

`zero` annihilates a semiring with respect to multiplication:

``` zero .*. a  ==  zero
a .*. zero  ==  zero
```

All laws should hold with respect to the required `Eq` instance.

For example, the Booleans form a semiring.

• `False` is an identity of disjunction which is commutative and associative,
• `True` is an identity of conjunction which is associative,
• conjunction distributes over disjunction, and
• `False` annihilates the Booleans with respect to conjunction.

Methods

zero :: sSource

one :: sSource

(.+.) :: s -> s -> sSource

(.*.) :: s -> s -> sSource

Instances

 Semiring Bool Semiring Leftmost Semiring Longest Semiring LeftLong Num a => Semiring (Numeric a)

fromBool :: Semiring s => Bool -> sSource

Auxiliary function to convert Booleans to an arbitrary semiring.

newtype Numeric a Source

Wrapper for numeric types.

Every numeric type that satisfies the semiring laws (as all predefined numeric types do) is a semiring.

Constructors

 Numeric FieldsgetNumeric :: a

Instances

 Num a => Weight c c (Numeric a) Eq a => Eq (Numeric a) Num a => Num (Numeric a) Show a => Show (Numeric a) Num a => Semiring (Numeric a)