diff options
-rw-r--r-- | src/Hakyll/Core/DirectedGraph/Internal.hs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Hakyll/Core/DirectedGraph/Internal.hs b/src/Hakyll/Core/DirectedGraph/Internal.hs index 5b02ad6..70efd8e 100644 --- a/src/Hakyll/Core/DirectedGraph/Internal.hs +++ b/src/Hakyll/Core/DirectedGraph/Internal.hs @@ -1,18 +1,22 @@ -- | Internal structure of the DirectedGraph type. Not exported outside of the -- library. -- +{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Hakyll.Core.DirectedGraph.Internal ( Node (..) , DirectedGraph (..) ) where import Prelude hiding (reverse, filter) +import Control.Applicative ((<$>), (<*>)) import Data.Monoid (Monoid, mempty, mappend) import Data.Set (Set) import Data.Map (Map) import qualified Data.Map as M import qualified Data.Set as S +import Data.Binary (Binary, put, get) + -- | A node in the directed graph -- data Node a = Node @@ -20,6 +24,10 @@ data Node a = Node , nodeNeighbours :: Set a -- ^ Edges starting at this node } deriving (Show) +instance (Binary a, Ord a) => Binary (Node a) where + put (Node t n) = put t >> put n + get = Node <$> get <*> get + -- | Append two nodes. Useful for joining graphs. -- appendNodes :: Ord a => Node a -> Node a -> Node a @@ -33,7 +41,7 @@ appendNodes (Node t1 n1) (Node t2 n2) -- | Type used to represent a directed graph -- newtype DirectedGraph a = DirectedGraph {unDirectedGraph :: Map a (Node a)} - deriving (Show) + deriving (Show, Binary) -- | Allow users to concatenate different graphs -- |