{-# LANGUAGE TypeFamilies, FlexibleInstances #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Graph.Class.AdjacencyMatrix -- Copyright : (C) 2011 Edward Kmett -- License : BSD-style (see the file LICENSE) -- -- Maintainer : Edward Kmett -- Stability : experimental -- Portability : type families -- ---------------------------------------------------------------------------- module Data.Graph.Class.AdjacencyMatrix ( AdjacencyMatrixGraph(..) , module Data.Graph.Class ) where import qualified Control.Monad.Trans.State.Strict as Strict import qualified Control.Monad.Trans.State.Lazy as Lazy import qualified Control.Monad.Trans.Writer.Strict as Strict import qualified Control.Monad.Trans.Writer.Lazy as Lazy import Control.Monad.Trans.Class import Data.Monoid import Data.Graph.Class class Graph g => AdjacencyMatrixGraph g where edge :: Vertex g -> Vertex g -> g (Maybe (Edge g)) instance AdjacencyMatrixGraph g => AdjacencyMatrixGraph (Strict.StateT s g) where edge a b = lift (edge a b) instance AdjacencyMatrixGraph g => AdjacencyMatrixGraph (Lazy.StateT s g) where edge a b = lift (edge a b) instance (AdjacencyMatrixGraph g, Monoid m) => AdjacencyMatrixGraph (Strict.WriterT m g) where edge a b = lift (edge a b) instance (AdjacencyMatrixGraph g, Monoid m) => AdjacencyMatrixGraph (Lazy.WriterT m g) where edge a b = lift (edge a b)