data-reify-0.3: Data/Reify/Graph.hs
-- |
-- Module: Data.Reify.Graph
-- Copyright: (c) 2009 Andy Gill
-- License: BSD3
--
-- Maintainer: Andy Gill <andygill@ku.edu>
-- Stability: unstable
-- Portability: ghc
--
-- This is the shared definition of a 'Graph' in Data.Reify.
{-# LANGUAGE FlexibleContexts, UndecidableInstances #-}
module Data.Reify.Graph (
Graph(..),
) where
import Data.Unique
-- 'Graph' is a basic graph structure over nodes of the higher kind 'e', with a single root.
data Graph e = Graph [(Unique,e Unique)] Unique
-- | If 'e' is s Functor, and 'e' is 'Show'-able, then we can 'Show' a 'Graph'.
instance (Functor e,Show (e Int)) => Show (Graph e) where
show (Graph netlist start) = "let " ++ show [ (hashUnique u,fmap hashUnique e)
| (u,e) <- netlist
] ++ " in " ++ show (hashUnique start)