algebraic-graphs-0.5: A library for algebraic graph construction and transformation

Copyright(c) Andrey Mokhov 2016-2018
LicenseMIT (see the file LICENSE)
Maintainerandrey.mokhov@gmail.com
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

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

data State Source #

The state of the order.

Constructors

Choice

Choosing what to order

Payment

Making the payment

Complete

The order is complete

coffeeTeaAutomaton :: Automaton Alphabet State Source #

An example automaton for ordering coffee or tea.

order = overlays [ Choice  -<[Coffee, Tea]>- Payment
                 , Choice  -<[Cancel     ]>- Complete
                 , Payment -<[Cancel     ]>- Choice
                 , Payment -<[Pay        ]>- 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                   ]) ]