module Data.Reify.GADT.Graph (
Unique,
Node (..),
Graph (..),
Terminal (..),
) where
type Unique = Int
data Node e = forall t. MkNode (e Terminal t)
instance (forall t. Show (e Terminal t)) => Show (Node e) where
show :: Node e -> String
show (MkNode e Terminal t
e) = e Terminal t -> String
forall a. Show a => a -> String
show e Terminal t
e
data Graph e a = Graph [(Unique, Node e)] Unique
newtype Terminal a = Terminal {forall a. Terminal a -> Int
unTerminal :: Unique}
instance Show (Terminal a) where
show :: Terminal a -> String
show (Terminal Int
a) = String
"Terminal " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
a