Copyright | (c) Andrey Mokhov 2016-2022 |
---|---|
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 various internal utilities and data structures used throughout the library, such as lists with fast concatenation. The API is unstable and unsafe, and is exposed only for documentation.
Synopsis
- data List a
- data Focus a = Focus { }
- emptyFocus :: Focus a
- vertexFocus :: (a -> Bool ) -> a -> Focus a
- overlayFoci :: Focus a -> Focus a -> Focus a
- connectFoci :: Focus a -> Focus a -> Focus a
- foldr1Safe :: (a -> a -> a) -> [a] -> Maybe a
- maybeF :: (a -> b -> a) -> a -> Maybe b -> Maybe a
- cartesianProductWith :: Ord c => (a -> b -> c) -> Set a -> Set b -> Set c
- coerce00 :: Coercible f g => f x -> g x
- coerce10 :: ( Coercible a b, Coercible f g) => (a -> f x) -> b -> g x
- coerce20 :: ( Coercible a b, Coercible c d, Coercible f g) => (a -> c -> f x) -> b -> d -> g x
- coerce01 :: ( Coercible a b, Coercible f g) => (f x -> a) -> g x -> b
- coerce11 :: ( Coercible a b, Coercible c d, Coercible f g) => (a -> f x -> c) -> b -> g x -> d
- coerce21 :: ( Coercible a b, Coercible c d, Coercible p q, Coercible f g) => (a -> c -> f x -> p) -> b -> d -> g x -> q
Data structures
An abstract list data type with
O(1)
time concatenation (the current
implementation uses difference lists). Here
a
is the type of list elements.
List
a
is a
Monoid
:
mempty
corresponds to the empty list and two lists
can be concatenated with
mappend
(or operator
<>
). Singleton
lists can be constructed using the function
pure
from the
Applicative
instance.
List
a
is also an instance of
IsList
, therefore you can use
list literals, e.g.
[1,4]
::
List
Int
is the same as
pure
1
<>
pure
4
; note that this requires the
OverloadedLists
GHC extension. To extract plain Haskell lists you can use the
toList
function from the
Foldable
instance.
Instances
Graph traversal
The
focus
of a graph expression is a flattened representation of the
subgraph under focus, its context, as well as the list of all encountered
vertices. See
removeEdge
for a use-case example.
emptyFocus :: Focus a Source #
Focus on the empty graph.
vertexFocus :: (a -> Bool ) -> a -> Focus a Source #
Focus on the graph with a single vertex, given a predicate indicating whether the vertex is of interest.
foldr1Safe :: (a -> a -> a) -> [a] -> Maybe a Source #
A safe version of
foldr1
.
Utilities
cartesianProductWith :: Ord c => (a -> b -> c) -> Set a -> Set b -> Set c Source #
Compute the Cartesian product of two sets, applying a function to each resulting pair.
coerce00 :: Coercible f g => f x -> g x Source #
Help GHC with type inference when direct use of
coerce
does not compile.
coerce10 :: ( Coercible a b, Coercible f g) => (a -> f x) -> b -> g x Source #
Help GHC with type inference when direct use of
coerce
does not compile.
coerce20 :: ( Coercible a b, Coercible c d, Coercible f g) => (a -> c -> f x) -> b -> d -> g x Source #
Help GHC with type inference when direct use of
coerce
does not compile.
coerce01 :: ( Coercible a b, Coercible f g) => (f x -> a) -> g x -> b Source #
Help GHC with type inference when direct use of
coerce
does not compile.