th-typegraph-0.21: Graph of the subtype relation

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.TH.TypeGraph.Graph

Description

Abstract operations on Maps containing graph edges.

Synopsis

Documentation

graphFromMap :: forall node key. Ord key => GraphEdges node key -> (Graph, Vertex -> (node, key, [key]), key -> Maybe Vertex) Source

Build a graph from the result of typeGraphEdges, each edge goes from a type to one of the types it contains. Thus, each edge represents a primitive lens, and each path in the graph is a composition of lenses.

reachableFrom :: forall m. (DsMonad m, MonadReader TypeGraph m) => TGV -> m (Set TGV) Source

goalReachableFull :: (Functor m, DsMonad m, MonadReader TypeGraph m) => TGV -> TGV -> m Bool Source

Can we reach the goal type from the start type in this key?

data VertexStatus typ Source

When a VertexStatus value is associated with a Type it describes alterations in the type graph from the usual default.

Constructors

Vertex

normal case

Sink

out degree zero - don't create any outgoing edges

Divert typ

replace all outgoing edges with an edge to an alternate type

Extra typ

add an extra outgoing edge to the given type

Instances

typeGraphEdges' Source

Arguments

:: (DsMonad m, MonadReader TypeGraph m, HasSet TGV m) 
=> (TGV -> m (Set TGV))

This function is applied to every expanded type before use, and the result is used instead. If it returns NoVertex, no vertices or edges are added to the graph. If it returns Sink no outgoing edges are added. The current use case Substitute is to see if there is an instance of class View a b where a is the type passed to doType, and replace it with b, and use the lens returned by View's method to convert between a and b (i.e. to implement the edge in the type graph.)

-> [Type] 
-> m (GraphEdges () TGV) 

Return the set of edges implied by the subtype relationship among a set of types. This is just the nodes of the type graph. The type aliases are expanded by the th-desugar package to make them suitable for use as map keys.

adjacent :: forall m. (MonadReader TypeGraph m, DsMonad m) => TGV -> m (Set TGV) Source

Return the set of adjacent vertices according to the default type graph - i.e. the one determined only by the type definitions, not by any additional hinting function.

typeGraphVertex :: (MonadReader TypeGraph m, DsMonad m) => Type -> m TGV Source

Return the TGV associated with a particular type, with no field specified.

typeGraphVertexOfField :: (MonadReader TypeGraph m, DsMonad m) => (Name, Name, Either Int Name) -> Type -> m TGV Source

Return the TGV associated with a particular type and field.