algebraic-graphs-0.6.1: A library for algebraic graph construction and transformation
Copyright (c) Andrey Mokhov 2016-2022
License MIT (see the file LICENSE)
Maintainer andrey.mokhov@gmail.com
Stability experimental
Safe Haskell None
Language Haskell2010

Algebra.Graph.Labelled.Example.Automaton

Description

Alga is a library for algebraic construction and manipulation of graphs in Haskell. See this paper for the motivation behind the library, the underlying theory, and implementation details.

This module contains a simple example of using edge-labelled graphs defined in the module Algebra.Graph.Labelled for working with finite automata.

Synopsis

Documentation

data Alphabet Source #

The alphabet of actions for ordering coffee or tea.

Constructors

Coffee

Order coffee

Tea

Order tea

Cancel

Cancel payment or order

Pay

Pay for the order

Instances

Instances details
Bounded Alphabet Source #
Instance details

Defined in Algebra.Graph.Labelled.Example.Automaton

Enum Alphabet Source #
Instance details

Defined in Algebra.Graph.Labelled.Example.Automaton

Eq Alphabet Source #
Instance details

Defined in Algebra.Graph.Labelled.Example.Automaton

Ord Alphabet Source #
Instance details

Defined in Algebra.Graph.Labelled.Example.Automaton

Show Alphabet Source #
Instance details

Defined in Algebra.Graph.Labelled.Example.Automaton

data State Source #

The state of the order.

Constructors

Choice

Choosing what to order

Payment

Making the payment

Complete

The order is complete

reachability :: Map State [ State ] Source #

The map of State reachability.

reachability = Map.fromList $ map (s -> (s, reachable s order)) [Choice ..]

Or, when evaluated:

reachability = Map.fromList [ (Choice  , [Choice  , Payment, Complete])
                            , (Payment , [Payment , Choice , Complete])
                            , (Complete, [Complete                   ]) ]