graphs-0.1: Data/Graph/Class/AdjacencyMatrix.hs
{-# LANGUAGE TypeFamilies, FlexibleInstances #-}
-----------------------------------------------------------------------------
-- |
-- Module : Data.Graph.Class.AdjacencyMatrix
-- Copyright : (C) 2011 Edward Kmett
-- License : BSD-style (see the file LICENSE)
--
-- Maintainer : Edward Kmett <ekmett@gmail.com>
-- 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)