{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE KindSignatures #-}
module Graphs.GraphDisp(
Graph(..),
newGraph,
redraw,
getMultipleNodes,
GraphParms(emptyGraphParms),
newNode,
setNodeType,
deleteNode,
setNodeFocus,
getNodeValue,
setNodeValue,
newNodeType,
NodeTypeParms(..),
newArc,
WrappedNode(..),
newArcListDrawer,
deleteArc,
setArcValue,
setArcType,
getArcValue,
newArcType,
ArcTypeParms(..),
Eq1(..),Ord1(..),
GraphAll(displaySort),
GraphClass(..),
NewGraph(..),
GraphConfig,
NewNode(..),
DeleteNode(..),
SetNodeFocus(..),
NodeClass,
NodeTypeClass,
NewNodeType(..),
NodeTypeConfig,
NewArc(..),
SetArcType(..),
DeleteArc(..),
ArcClass,
ArcTypeClass(..),
NewArcType(..),
ArcTypeConfig,
) where
import Data.Typeable
import Util.VariableList hiding (redraw)
import Util.Delayer(HasDelayer(..))
import Events.Events(Event)
import Events.Destructible
newtype
GraphAll graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms
=> Graph graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms
= Graph graph deriving (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool)
-> (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool)
-> Eq
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Eq graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
/= :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
$c/= :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Eq graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
== :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
$c== :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Eq graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
Eq,Eq
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
Eq
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
-> (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Ordering)
-> (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool)
-> (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool)
-> (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool)
-> (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool)
-> (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
-> (Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
-> Ord
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Ordering
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Eq
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Ordering
forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
min :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
$cmin :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
max :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
$cmax :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
>= :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
$c>= :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
> :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
$c> :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
<= :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
$c<= :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
< :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
$c< :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Bool
compare :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Ordering
$ccompare :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Ordering
$cp1Ord :: forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
Ord graph =>
Eq
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
Ord)
instance (GraphAll graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms)
=> Destroyable (Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms) where
destroy :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> IO ()
destroy (Graph graph
graph) = graph -> IO ()
forall o. Destroyable o => o -> IO ()
destroy graph
graph
instance (GraphAll graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms)
=> Destructible (Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms) where
destroyed :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Event ()
destroyed (Graph graph
graph) = graph -> Event ()
forall o. Destructible o => o -> Event ()
destroyed graph
graph
instance (GraphAll graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms)
=> HasDelayer (Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms) where
toDelayer :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> Delayer
toDelayer (Graph graph
graph) = graph -> Delayer
forall object. HasDelayer object => object -> Delayer
toDelayer graph
graph
newGraph :: (GraphAll graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms) =>
(Graph graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms) ->
graphParms
-> IO (Graph graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms)
newGraph :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> graphParms
-> IO
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
newGraph
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
_::(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms))
(graphParms
graphParms :: graphParms) =
do
(graph
graph :: graph) <- graphParms -> IO graph
forall graph graphParms.
NewGraph graph graphParms =>
graphParms -> IO graph
newGraphPrim graphParms
graphParms
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> IO
(Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms)
forall (m :: * -> *) a. Monad m => a -> m a
return (graph
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
graph
-> Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
Graph graph
graph ::
Graph graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms)
redraw :: (GraphAll graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms) =>
(Graph graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms)
-> IO ()
redraw :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> IO ()
redraw (Graph graph
graph) = graph -> IO ()
forall graph. GraphClass graph => graph -> IO ()
redrawPrim graph
graph
getMultipleNodes :: (GraphAll graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms) =>
(Graph graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms)
-> (Event (WrappedNode node) -> IO a) -> IO a
getMultipleNodes :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> (Event (WrappedNode node) -> IO a) -> IO a
getMultipleNodes (Graph graph
graph) = graph -> (Event (WrappedNode node) -> IO a) -> IO a
forall graph (node :: * -> *) a.
DeleteNode graph node =>
graph -> (Event (WrappedNode node) -> IO a) -> IO a
getMultipleNodesPrim graph
graph
class GraphParms graphParms where
emptyGraphParms :: graphParms
newNode :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms arc arcType arcTypeParms)
-> nodeType value -> value -> IO (node value)
newNode :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> nodeType value -> value -> IO (node value)
newNode
((Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms))
(nodeType value
nodeType :: nodeType value)
(value
value :: value) = (graph -> nodeType value -> value -> IO (node value)
forall graph (node :: * -> *) (nodeType :: * -> *) value.
(NewNode graph node nodeType, Typeable value) =>
graph -> nodeType value -> value -> IO (node value)
newNodePrim graph
graph nodeType value
nodeType value
value) :: IO (node value)
setNodeType :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms arc arcType arcTypeParms)
-> node value -> nodeType value -> IO ()
setNodeType :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> node value -> nodeType value -> IO ()
setNodeType
((Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms))
(node value
node :: node value)
(nodeType value
nodeType :: nodeType value)
= (graph -> node value -> nodeType value -> IO ()
forall graph (node :: * -> *) (nodeType :: * -> *) value.
(NewNode graph node nodeType, Typeable value) =>
graph -> node value -> nodeType value -> IO ()
setNodeTypePrim graph
graph node value
node nodeType value
nodeType) :: IO ()
deleteNode :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
-> node value -> IO ()
deleteNode :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> node value -> IO ()
deleteNode
((Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms))
(node value
node :: node value) = graph -> node value -> IO ()
forall graph (node :: * -> *) value.
(DeleteNode graph node, Typeable value) =>
graph -> node value -> IO ()
deleteNodePrim graph
graph node value
node
setNodeFocus :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
-> node value -> IO ()
setNodeFocus :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> node value -> IO ()
setNodeFocus
((Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms))
(node value
node :: node value) = graph -> node value -> IO ()
forall graph (node :: * -> *) value.
(SetNodeFocus graph node, Typeable value) =>
graph -> node value -> IO ()
setNodeFocusPrim graph
graph node value
node
getNodeValue :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
-> node value -> IO value
getNodeValue :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> node value -> IO value
getNodeValue
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
(node value
node :: node value) = graph -> node value -> IO value
forall graph (node :: * -> *) value.
(DeleteNode graph node, Typeable value) =>
graph -> node value -> IO value
getNodeValuePrim graph
graph node value
node
setNodeValue :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
-> node value -> value -> IO ()
setNodeValue :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> node value -> value -> IO ()
setNodeValue
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
(node value
node :: node value) value
value = graph -> node value -> value -> IO ()
forall graph (node :: * -> *) value.
(DeleteNode graph node, Typeable value) =>
graph -> node value -> value -> IO ()
setNodeValuePrim graph
graph node value
node value
value
newNodeType :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms arc arcType
arcTypeParms)
-> nodeTypeParms value -> IO (nodeType value)
newNodeType :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> nodeTypeParms value -> IO (nodeType value)
newNodeType
((Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms))
(nodeTypeParms value
nodeTypeParms :: nodeTypeParms value) =
(graph -> nodeTypeParms value -> IO (nodeType value)
forall graph (nodeType :: * -> *) (nodeTypeParms :: * -> *) value.
(NewNodeType graph nodeType nodeTypeParms, Typeable value) =>
graph -> nodeTypeParms value -> IO (nodeType value)
newNodeTypePrim graph
graph nodeTypeParms value
nodeTypeParms) :: IO (nodeType value)
class NodeTypeParms nodeTypeParms where
emptyNodeTypeParms :: Typeable value =>
nodeTypeParms value
coMapNodeTypeParms :: (Typeable value1,Typeable value2) =>
(value2 -> value1) -> nodeTypeParms value1 -> nodeTypeParms value2
newArc :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,
Typeable value,Typeable nodeFromValue,Typeable nodeToValue) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
-> arcType value -> value -> node nodeFromValue -> node nodeToValue
-> IO (arc value)
newArc :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> arcType value
-> value
-> node nodeFromValue
-> node nodeToValue
-> IO (arc value)
newArc
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
(arcType value
arcType :: arcType value)
(value
value :: value)
(node nodeFromValue
nodeFrom :: node nodeFromValue)
(node nodeToValue
nodeTo :: node nodeToValue) =
(graph
-> arcType value
-> value
-> node nodeFromValue
-> node nodeToValue
-> IO (arc value)
forall graph (nodeFrom :: * -> *) (nodeTo :: * -> *)
(arc :: * -> *) (arcType :: * -> *) value nodeFromValue
nodeToValue.
(NewArc graph nodeFrom nodeTo arc arcType, Typeable value,
Typeable nodeFromValue, Typeable nodeToValue) =>
graph
-> arcType value
-> value
-> nodeFrom nodeFromValue
-> nodeTo nodeToValue
-> IO (arc value)
newArcPrim graph
graph arcType value
arcType value
value node nodeFromValue
nodeFrom node nodeToValue
nodeTo) :: IO (arc value)
newArcListDrawer :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,
Typeable value,Typeable nodeFromValue)
=> (Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
-> node nodeFromValue
-> ListDrawer (arcType value,value,WrappedNode node) (arc value)
newArcListDrawer :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> node nodeFromValue
-> ListDrawer (arcType value, value, WrappedNode node) (arc value)
newArcListDrawer
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms)
(node nodeFromValue
nodeFrom :: node nodeFromValue) =
(graph
-> node nodeFromValue
-> ListDrawer (arcType value, value, WrappedNode node) (arc value)
forall graph (nodeFrom :: * -> *) (nodeTo :: * -> *)
(arc :: * -> *) (arcType :: * -> *) value nodeFromValue.
(NewArc graph nodeFrom nodeTo arc arcType, Typeable value,
Typeable nodeFromValue) =>
graph
-> nodeFrom nodeFromValue
-> ListDrawer
(arcType value, value, WrappedNode nodeTo) (arc value)
newArcListDrawerPrim graph
graph node nodeFromValue
nodeFrom)
deleteArc :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,
Typeable value)=>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms) -> arc value -> IO ()
deleteArc :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> arc value -> IO ()
deleteArc
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms)
(arc value
arc :: arc value) = graph -> arc value -> IO ()
forall graph (arc :: * -> *) value.
(DeleteArc graph arc, Typeable value) =>
graph -> arc value -> IO ()
deleteArcPrim graph
graph arc value
arc
setArcValue :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms) -> arc value -> value -> IO ()
setArcValue :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> arc value -> value -> IO ()
setArcValue
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms)
(arc value
arc :: arc value) (value
value :: value) = graph -> arc value -> value -> IO ()
forall graph (arc :: * -> *) value.
(DeleteArc graph arc, Typeable value) =>
graph -> arc value -> value -> IO ()
setArcValuePrim graph
graph arc value
arc value
value
setArcType :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms) -> arc value -> arcType value -> IO ()
setArcType :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> arc value -> arcType value -> IO ()
setArcType
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms)
(arc value
arc :: arc value) (arcType value
arcType :: arcType value)
= graph -> arc value -> arcType value -> IO ()
forall graph (arc :: * -> *) (arcType :: * -> *) value.
(SetArcType graph arc arcType, Typeable value) =>
graph -> arc value -> arcType value -> IO ()
setArcTypePrim graph
graph arc value
arc arcType value
arcType
getArcValue :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms) -> arc value -> IO value
getArcValue :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> arc value -> IO value
getArcValue
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms)
(arc value
arc :: arc value) = graph -> arc value -> IO value
forall graph (arc :: * -> *) value.
(DeleteArc graph arc, Typeable value) =>
graph -> arc value -> IO value
getArcValuePrim graph
graph arc value
arc
newArcType :: (GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms,Typeable value) =>
(Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms) ->
arcTypeParms value -> IO (arcType value)
newArcType :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
-> arcTypeParms value -> IO (arcType value)
newArcType
(Graph graph
graph :: Graph graph graphParms node nodeType nodeTypeParms arc
arcType arcTypeParms)
(arcTypeParms value
arcTypeParms :: arcTypeParms value) =
(graph -> arcTypeParms value -> IO (arcType value)
forall graph (arcType :: * -> *) (arcTypeParms :: * -> *) value.
(NewArcType graph arcType arcTypeParms, Typeable value) =>
graph -> arcTypeParms value -> IO (arcType value)
newArcTypePrim graph
graph arcTypeParms value
arcTypeParms) :: IO (arcType value)
class ArcTypeParms arcTypeParms where
emptyArcTypeParms :: Typeable value => arcTypeParms value
invisibleArcTypeParms :: Typeable value => arcTypeParms value
coMapArcTypeParms :: (Typeable value1,Typeable value2) =>
(value2 -> value1) -> arcTypeParms value1 -> arcTypeParms value2
class (GraphClass graph,NewGraph graph graphParms,GraphParms graphParms,
NewNode graph node nodeType,DeleteNode graph node,SetNodeFocus graph node,
NodeClass node,Typeable node,NodeTypeClass nodeType,
NewNodeType graph nodeType nodeTypeParms,NodeTypeParms nodeTypeParms,
NewArc graph node node arc arcType,
SetArcType graph arc arcType,
DeleteArc graph arc,
ArcClass arc,Typeable arc,ArcTypeClass arcType,
NewArcType graph arcType arcTypeParms
) =>
GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms where
displaySort :: Graph graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms
instance (GraphClass graph,NewGraph graph graphParms,GraphParms graphParms,
NewNode graph node nodeType,DeleteNode graph node,SetNodeFocus graph node,
NodeClass node,NodeTypeClass nodeType,
NewNodeType graph nodeType nodeTypeParms,NodeTypeParms nodeTypeParms,
NewArc graph node node arc arcType,
SetArcType graph arc arcType,
DeleteArc graph arc,
ArcClass arc,ArcTypeClass arcType,
NewArcType graph arcType arcTypeParms
) =>
GraphAll graph graphParms node nodeType nodeTypeParms
arc arcType arcTypeParms where
displaySort :: Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
displaySort = Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
forall graph graphParms (node :: * -> *) (nodeType :: * -> *)
(nodeTypeParms :: * -> *) (arc :: * -> *) (arcType :: * -> *)
(arcTypeParms :: * -> *).
GraphAll
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms =>
Graph
graph
graphParms
node
nodeType
nodeTypeParms
arc
arcType
arcTypeParms
displaySort
class (Destructible graph,Ord graph,Typeable graph,HasDelayer graph)
=> GraphClass graph where
redrawPrim :: graph -> IO ()
class (GraphClass graph,GraphParms graphParms)
=> NewGraph graph graphParms where
newGraphPrim :: graphParms -> IO graph
class GraphConfig graphConfig
class (GraphClass graph,NodeClass node,NodeTypeClass nodeType) =>
NewNode graph node nodeType where
newNodePrim :: Typeable value =>
graph -> nodeType value -> value -> IO (node value)
setNodeTypePrim :: Typeable value =>
graph -> node value -> nodeType value -> IO ()
class (GraphClass graph,NodeClass node) =>
DeleteNode graph node where
deleteNodePrim :: Typeable value =>
graph -> node value -> IO ()
getNodeValuePrim :: Typeable value =>
graph -> node value -> IO value
setNodeValuePrim :: Typeable value =>
graph -> node value -> value -> IO ()
getMultipleNodesPrim :: graph -> (Event (WrappedNode node) -> IO a) -> IO a
class (GraphClass graph,NodeClass node) =>
SetNodeFocus graph node where
setNodeFocusPrim :: Typeable value =>
graph -> node value -> IO ()
class (Typeable node,Ord1 node) => NodeClass node
class Typeable (nodeType :: * -> *) => NodeTypeClass nodeType
class (GraphClass graph,NodeTypeClass nodeType,NodeTypeParms nodeTypeParms)
=> NewNodeType graph nodeType nodeTypeParms where
newNodeTypePrim :: Typeable value =>
graph -> nodeTypeParms value -> IO (nodeType value)
class Kind1 nodeTypeConfig => NodeTypeConfig nodeTypeConfig
class (GraphClass graph,NodeClass nodeFrom,NodeClass nodeTo,ArcClass arc,
ArcTypeClass arcType)
=> NewArc graph nodeFrom nodeTo arc arcType where
newArcPrim ::
(Typeable value,Typeable nodeFromValue,Typeable nodeToValue)
=> graph -> arcType value -> value
-> nodeFrom nodeFromValue -> nodeTo nodeToValue
-> IO (arc value)
newArcListDrawerPrim ::
(Typeable value,Typeable nodeFromValue)
=> graph -> nodeFrom nodeFromValue
-> ListDrawer (arcType value,value,WrappedNode nodeTo) (arc value)
class (ArcClass arc,ArcTypeClass arcType) => SetArcType graph arc arcType where
setArcTypePrim ::
Typeable value => graph -> arc value -> arcType value -> IO ()
data WrappedNode node = forall value . Typeable value
=> WrappedNode (node value)
class (GraphClass graph,ArcClass arc) => DeleteArc graph arc where
deleteArcPrim :: (Typeable value) => graph -> arc value -> IO ()
setArcValuePrim :: Typeable value => graph -> arc value -> value -> IO ()
getArcValuePrim :: Typeable value => graph -> arc value -> IO value
class (Typeable arc,Ord1 arc) => ArcClass arc
class (Typeable arcType,Ord1 arcType) => ArcTypeClass arcType where
invisibleArcType :: Typeable value => arcType value
class (GraphClass graph,ArcTypeClass arcType,ArcTypeParms arcTypeParms) =>
NewArcType graph arcType arcTypeParms where
newArcTypePrim :: Typeable value =>
graph -> arcTypeParms value -> IO (arcType value)
class Kind1 arcTypeConfig => ArcTypeConfig arcTypeConfig
class Kind1 takesParm where
kindOne :: takesParm value -> ()
instance Kind1 takesParm where
kindOne :: takesParm value -> ()
kindOne takesParm value
_ = ()
class Kind2 takes2Parms where
kindTwo :: takes2Parms value1 value2-> ()
instance Kind2 takesParms where
kindTwo :: takesParms value1 value2 -> ()
kindTwo takesParms value1 value2
_ = ()
class Kind3 takes3Parms where
kindThree :: takes3Parms value1 value2 value3 -> ()
instance Kind3 takesParms where
kindThree :: takesParms value1 value2 value3 -> ()
kindThree takesParms value1 value2 value3
_ = ()
class Eq1 takesParm where
eq1 :: takesParm value1 -> takesParm value1 -> Bool
class Eq1 takesParm => Ord1 takesParm where
compare1 :: takesParm value1 -> takesParm value1 -> Ordering