module DataFlow.Graphviz where
newtype ID = ID String deriving (Eq, Ord)
instance Show ID where
show (ID i) = i
data Attr = Attr ID ID deriving (Show, Eq)
type AttrList = [Attr]
data Compass = N | NE | E | SE | S | SW | W | NW | C deriving (Show, Eq, Ord)
data Port = Port (Maybe ID) Compass deriving (Show, Eq, Ord)
data NodeID = NodeID ID (Maybe Port) deriving (Show, Eq, Ord)
data Subgraph = Subgraph ID StmtList deriving (Show, Eq)
data EdgeOperator = Arrow | Line deriving (Show, Eq)
data EdgeOperand = IDOperand NodeID
| SubgraphOperand Subgraph deriving (Show, Eq)
data EdgeExpr = EdgeExpr EdgeOperand EdgeOperator EdgeOperand deriving (Show, Eq)
data AttrStmtType = Graph | Node | Edge deriving (Show, Eq)
data Stmt = NodeStmt ID AttrList
| EdgeStmt EdgeExpr AttrList
| AttrStmt AttrStmtType AttrList
| EqualsStmt ID ID
| SubgraphStmt Subgraph deriving (Show, Eq)
type StmtList = [Stmt]
data Graph = Digraph ID StmtList deriving (Show, Eq)