Copyright | (c) Andrey Mokhov 2016-2017 |
---|---|
License | MIT (see the file LICENSE) |
Maintainer | andrey.mokhov@gmail.com |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
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 defines basic data types and functions for exporting graphs in textual and binary formats. Algebra.Graph.Export.Dot provides DOT-specific functionality.
- data Doc s
- literal :: s -> Doc s
- render :: Monoid s => Doc s -> s
- (<+>) :: (Eq s, IsString s, Monoid s) => Doc s -> Doc s -> Doc s
- brackets :: IsString s => Doc s -> Doc s
- doubleQuotes :: IsString s => Doc s -> Doc s
- indent :: IsString s => Int -> Doc s -> Doc s
- unlines :: IsString s => [Doc s] -> Doc s
- export :: (Ord a, ToGraph g, ToVertex g ~ a) => (a -> Doc s) -> (a -> a -> Doc s) -> g -> Doc s
Constructing and exporting documents
An abstract document type, where s
is the type of strings or words (text
or binary). Doc
s
is a Monoid
, therefore mempty
corresponds to the
empty document and two documents can be concatenated with mappend
(or
operator <>
). Note that most functions on Doc
s
require
that the underlying type s
is also a Monoid
.
literal :: s -> Doc s Source #
Construct a document comprising a single string or word. If s
is an
instance of class IsString
, then documents of type Doc
s
can be
constructed directly from string literals (see the second example below).
literal "Hello, " <> literal "World!" == literal "Hello, World!" literal "I am just a string literal" == "I am just a string literal" literalmempty
==mempty
render
. literal ==id
literal .render
==id
Common combinators for text documents
brackets :: IsString s => Doc s -> Doc s Source #
Wrap a document in square brackets.
brackets "i" == "[i]"
brackets mempty
== "[]"
doubleQuotes :: IsString s => Doc s -> Doc s Source #
Wrap a document into double quotes.
doubleQuotes "/path/with spaces" == "\"/path/with spaces\""
doubleQuotes (doubleQuotes mempty
) == "\"\"\"\""
Generic graph export
export :: (Ord a, ToGraph g, ToVertex g ~ a) => (a -> Doc s) -> (a -> a -> Doc s) -> g -> Doc s Source #
Export a graph into a document given two functions that construct documents
for individual vertices and edges. The order of export is: vertices, sorted
by Ord
a
, and then edges, sorted by Ord
(a, a)
.
For example:
vDoc x =literal
(show
x) <> "\n" eDoc x y =literal
(show
x) <> " -> " <>literal
(show
y) <> "\n" > putStrLn $render
$ export vDoc eDoc (1 + 2 * (3 + 4) ::Graph
Int) 1 2 3 4 2 -> 3 2 -> 4