Safe Haskell | None |
---|---|
Language | Haskell2010 |
Abstract operations on Maps containing graph edges.
- data TypeGraph
- typeInfo :: Lens' TypeGraph TypeInfo
- edges :: Lens' TypeGraph (GraphEdges TGV)
- graph :: Lens' TypeGraph (Graph, Vertex -> ((), TGV, [TGV]), TGV -> Maybe Vertex)
- gsimple :: Lens' TypeGraph (Graph, Vertex -> ((), TGVSimple, [TGVSimple]), TGVSimple -> Maybe Vertex)
- stack :: Lens' TypeGraph [StackElement]
- makeTypeGraph :: MonadReaders TypeInfo m => GraphEdges TGV -> m TypeGraph
- graphFromMap :: forall key. Ord key => GraphEdges key -> (Graph, Vertex -> ((), key, [key]), key -> Maybe Vertex)
- allLensKeys :: (DsMonad m, MonadStates ExpandMap m, MonadReaders TypeGraph m) => m (Map TGVSimple (Set TGV))
- allPathKeys :: (DsMonad m, MonadStates ExpandMap m, MonadReaders TypeGraph m) => m (Map TGVSimple (Set TGVSimple))
- allPathStarts :: forall m. (DsMonad m, MonadStates ExpandMap m, MonadReaders TypeGraph m) => m (Set TGV)
- reachableFrom :: forall m. (DsMonad m, MonadReaders TypeGraph m) => TGV -> m (Set TGV)
- reachableFromSimple :: forall m. (DsMonad m, MonadReaders TypeGraph m) => TGVSimple -> m (Set TGVSimple)
- goalReachableFull :: (Functor m, DsMonad m, MonadReaders TypeGraph m) => TGV -> TGV -> m Bool
- goalReachableSimple :: (Functor m, DsMonad m, MonadReaders TypeGraph m) => TGVSimple -> TGVSimple -> m Bool
- goalReachableSimple' :: (Functor m, DsMonad m, MonadReaders TypeGraph m) => TGV -> TGV -> m Bool
- data VertexStatus typ
- adjacent :: forall m. (MonadReaders TypeGraph m, DsMonad m, MonadStates ExpandMap m) => TGV -> m (Set TGV)
- typeGraphVertex :: (MonadReaders TypeGraph m, MonadStates ExpandMap m, DsMonad m) => Type -> m TGV
- typeGraphVertexOfField :: (MonadReaders TypeGraph m, MonadStates ExpandMap m, DsMonad m) => (Name, Name, Either Int Name) -> Type -> m TGV
Documentation
Ppr TypeGraph Source | |
(Monad m, MonadReaders [StackElement] m) => MonadReaders [StackElement] (ReaderT TypeGraph m) Source |
gsimple :: Lens' TypeGraph (Graph, Vertex -> ((), TGVSimple, [TGVSimple]), TGVSimple -> Maybe Vertex) Source
makeTypeGraph :: MonadReaders TypeInfo m => GraphEdges TGV -> m TypeGraph Source
Build a TypeGraph given a set of edges and the TypeInfo environment
graphFromMap :: forall key. Ord key => GraphEdges key -> (Graph, Vertex -> ((), 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.
TypeGraph queries
allLensKeys :: (DsMonad m, MonadStates ExpandMap m, MonadReaders TypeGraph m) => m (Map TGVSimple (Set TGV)) Source
Lenses represent steps in a path, but the start point is a type vertex and the endpoint is a field vertex.
allPathKeys :: (DsMonad m, MonadStates ExpandMap m, MonadReaders TypeGraph m) => m (Map TGVSimple (Set TGVSimple)) Source
Paths go between simple types.
allPathStarts :: forall m. (DsMonad m, MonadStates ExpandMap m, MonadReaders TypeGraph m) => m (Set TGV) Source
reachableFrom :: forall m. (DsMonad m, MonadReaders TypeGraph m) => TGV -> m (Set TGV) Source
reachableFromSimple :: forall m. (DsMonad m, MonadReaders TypeGraph m) => TGVSimple -> m (Set TGVSimple) Source
goalReachableFull :: (Functor m, DsMonad m, MonadReaders TypeGraph m) => TGV -> TGV -> m Bool Source
Can we reach the goal type from the start type in this key?
goalReachableSimple :: (Functor m, DsMonad m, MonadReaders TypeGraph m) => TGVSimple -> TGVSimple -> m Bool Source
Can we reach the goal type in the simplified graph?
goalReachableSimple' :: (Functor m, DsMonad m, MonadReaders TypeGraph m) => TGV -> TGV -> m Bool Source
Version of goalReachableSimple that first simplifies its argument nodes
data VertexStatus typ Source
When a VertexStatus value is associated with a Type it describes alterations in the type graph from the usual default.
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 |
Show typ => Show (VertexStatus typ) Source | |
Default (VertexStatus typ) Source |
adjacent :: forall m. (MonadReaders TypeGraph m, DsMonad m, MonadStates ExpandMap 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 :: (MonadReaders TypeGraph m, MonadStates ExpandMap m, DsMonad m) => Type -> m TGV Source
Return the TGV associated with a particular type, with no field specified.
typeGraphVertexOfField :: (MonadReaders TypeGraph m, MonadStates ExpandMap m, DsMonad m) => (Name, Name, Either Int Name) -> Type -> m TGV Source
Return the TGV associated with a particular type and field.