graphene-0.1.0.2: src/Graphene/Class.hs
module Graphene.Class where
import Lens.Family2
-- | Graph with edge type `e` and vertex type `v`
data Graph e v = Graph
{ _vertices :: [v] -- list of vertices
, _edges :: [(e, (v, v))] -- list of edges and their associated vertex pairs
} deriving (Show, Eq)
vertices :: Lens' (Graph e v) [v]
vertices k (Graph vs es) = fmap (\vs' -> Graph vs' es) (k vs)
edges :: Lens' (Graph e v) [(e, (v, v))]
edges k (Graph vs es) = fmap (\es' -> Graph vs es') (k es)