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.Internal

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 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 structures

data List a Source #

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

Instances details
Monad List Source #
Instance details

Defined in Algebra.Graph.Internal

Functor List Source #
Instance details

Defined in Algebra.Graph.Internal

Applicative List Source #
Instance details

Defined in Algebra.Graph.Internal

Foldable List Source #
Instance details

Defined in Algebra.Graph.Internal

IsList ( List a) Source #
Instance details

Defined in Algebra.Graph.Internal

Associated Types

type Item ( List a) Source #

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

Defined in Algebra.Graph.Internal

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

Defined in Algebra.Graph.Internal

Show a => Show ( List a) Source #
Instance details

Defined in Algebra.Graph.Internal

Semigroup ( List a) Source #
Instance details

Defined in Algebra.Graph.Internal

Monoid ( List a) Source #
Instance details

Defined in Algebra.Graph.Internal

type Item ( List a) Source #
Instance details

Defined in Algebra.Graph.Internal

type Item ( List a) = a

Graph traversal

data Focus a Source #

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.

Constructors

Focus

All vertices (leaves) of the graph expression.

Fields

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 .

maybeF :: (a -> b -> a) -> a -> Maybe b -> Maybe a Source #

An auxiliary function that tries to apply a function to a base case and a Maybe value and returns Just the result or Just the base case.

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.

coerce11 :: ( Coercible a b, Coercible c d, Coercible f g) => (a -> f x -> c) -> b -> g x -> d Source #

Help GHC with type inference when direct use of coerce does not compile.

coerce21 :: ( Coercible a b, Coercible c d, Coercible p q, Coercible f g) => (a -> c -> f x -> p) -> b -> d -> g x -> q Source #

Help GHC with type inference when direct use of coerce does not compile.