{-# LANGUAGE Rank2Types #-}
module Capabilities.Graphviz (
MonadGraphviz (errorWithoutGraphviz, layoutGraph, layoutGraph'),
) where
import Control.Monad.Trans.Class (MonadTrans (lift))
import Control.OutputCapable.Blocks.Generic (
GenericReportT
)
import Data.GraphViz (
AttributeEdge,
AttributeNode,
GraphvizCommand,
GraphvizParams,
)
import Data.Graph.Inductive.Graph (Graph, Node)
class Monad m => MonadGraphviz m where
errorWithoutGraphviz :: m ()
layoutGraph
:: forall gr v e . Graph gr
=> GraphvizCommand
-> gr v e
-> m (gr (AttributeNode v) (AttributeEdge e))
layoutGraph'
:: (Ord cl, Graph gr)
=> GraphvizParams Node v e cl l
-> GraphvizCommand
-> gr v e
-> m (gr (AttributeNode v) (AttributeEdge e))
instance MonadGraphviz m => MonadGraphviz (GenericReportT l o m) where
errorWithoutGraphviz :: GenericReportT l o m ()
errorWithoutGraphviz = m () -> GenericReportT l o m ()
forall (m :: * -> *) a. Monad m => m a -> GenericReportT l o m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift m ()
forall (m :: * -> *). MonadGraphviz m => m ()
errorWithoutGraphviz
layoutGraph :: forall (gr :: * -> * -> *) v e.
Graph gr =>
GraphvizCommand
-> gr v e
-> GenericReportT l o m (gr (AttributeNode v) (AttributeEdge e))
layoutGraph GraphvizCommand
command = m (gr (AttributeNode v) (AttributeEdge e))
-> GenericReportT l o m (gr (AttributeNode v) (AttributeEdge e))
forall (m :: * -> *) a. Monad m => m a -> GenericReportT l o m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (gr (AttributeNode v) (AttributeEdge e))
-> GenericReportT l o m (gr (AttributeNode v) (AttributeEdge e)))
-> (gr v e -> m (gr (AttributeNode v) (AttributeEdge e)))
-> gr v e
-> GenericReportT l o m (gr (AttributeNode v) (AttributeEdge e))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GraphvizCommand
-> gr v e -> m (gr (AttributeNode v) (AttributeEdge e))
forall (m :: * -> *) (gr :: * -> * -> *) v e.
(MonadGraphviz m, Graph gr) =>
GraphvizCommand
-> gr v e -> m (gr (AttributeNode v) (AttributeEdge e))
forall (gr :: * -> * -> *) v e.
Graph gr =>
GraphvizCommand
-> gr v e -> m (gr (AttributeNode v) (AttributeEdge e))
layoutGraph GraphvizCommand
command
layoutGraph' :: forall cl (gr :: * -> * -> *) v e l.
(Ord cl, Graph gr) =>
GraphvizParams Node v e cl l
-> GraphvizCommand
-> gr v e
-> GenericReportT l o m (gr (AttributeNode v) (AttributeEdge e))
layoutGraph' GraphvizParams Node v e cl l
params GraphvizCommand
command = m (gr (AttributeNode v) (AttributeEdge e))
-> GenericReportT l o m (gr (AttributeNode v) (AttributeEdge e))
forall (m :: * -> *) a. Monad m => m a -> GenericReportT l o m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (gr (AttributeNode v) (AttributeEdge e))
-> GenericReportT l o m (gr (AttributeNode v) (AttributeEdge e)))
-> (gr v e -> m (gr (AttributeNode v) (AttributeEdge e)))
-> gr v e
-> GenericReportT l o m (gr (AttributeNode v) (AttributeEdge e))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GraphvizParams Node v e cl l
-> GraphvizCommand
-> gr v e
-> m (gr (AttributeNode v) (AttributeEdge e))
forall cl (gr :: * -> * -> *) v e l.
(Ord cl, Graph gr) =>
GraphvizParams Node v e cl l
-> GraphvizCommand
-> gr v e
-> m (gr (AttributeNode v) (AttributeEdge e))
forall (m :: * -> *) cl (gr :: * -> * -> *) v e l.
(MonadGraphviz m, Ord cl, Graph gr) =>
GraphvizParams Node v e cl l
-> GraphvizCommand
-> gr v e
-> m (gr (AttributeNode v) (AttributeEdge e))
layoutGraph' GraphvizParams Node v e cl l
params GraphvizCommand
command