yap-examples-0.1: examples of the algebraic classes in the yap package
Copyright(c) Ross Paterson 2021
LicenseBSD-style (see the file LICENSE)
Maintainer[email protected]
Stabilityprovisional
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Data.YAP.FiniteSet

Description

An example instance of the algebraic classes: the semiring of finite sets.

Synopsis

Finite sets

data FiniteSet a Source #

The semiring of sets over a monoid, with union as addition and the monoid operation lifted to multiplication. This is equivalent to FiniteMap with a Boolean semiring as codomain.

Instances

Instances details
Show a => Show (FiniteSet a) Source # 
Instance details

Defined in Data.YAP.FiniteSet

Eq a => Eq (FiniteSet a) Source # 
Instance details

Defined in Data.YAP.FiniteSet

Methods

(==) :: FiniteSet a -> FiniteSet a -> Bool #

(/=) :: FiniteSet a -> FiniteSet a -> Bool #

Ord a => Ord (FiniteSet a) Source # 
Instance details

Defined in Data.YAP.FiniteSet

Ord a => AdditiveMonoid (FiniteSet a) Source #

(+) is union

Instance details

Defined in Data.YAP.FiniteSet

Methods

(+) :: FiniteSet a -> FiniteSet a -> FiniteSet a #

zero :: FiniteSet a #

atimes :: ToInteger b => b -> FiniteSet a -> FiniteSet a #

(Ord a, Monoid a) => Semiring (FiniteSet a) Source #

(*) is elementwise <>

Instance details

Defined in Data.YAP.FiniteSet

Construction

singleton :: a -> FiniteSet a Source #

A set containing a single element.

fromList :: Ord a => [a] -> FiniteSet a Source #

A set formed from a list by removing duplicates.

Queries

elems :: FiniteSet a -> [a] Source #

The elements of the set.

Finite formal languages

type FiniteLanguage a = FiniteSet [a] Source #

Finite formal languages, with (+) as union and (*) as concatenation.

Examples

Expand
>>> zero :: FiniteSet String
fromList []
>>> one :: FiniteSet String
fromList [""]
>>> (singleton "a" + singleton "ab") * (singleton "c" + singleton "bc")
fromList ["abbc","abc","ac"]
>>> (singleton "a" + singleton "ab")^3
fromList ["aaa","aaab","aaba","aabab","abaa","abaab","ababa","ababab"]