The constraints (Hashable v, Eq v) for methods of the Graph class are totally unnecessary. These constraints are implementation-specific for UGraph and DGraph, so the constraints should be moved to instances of the Graph.
instance (Hashable v, Eq v) => Graph (Graph v e) where ...
Of course, the Eq v makes sense at some of the methods (e.g. removeVertex) but definitely not all.
The constraints
(Hashable v, Eq v)for methods of theGraphclass are totally unnecessary. These constraints are implementation-specific forUGraphandDGraph, so the constraints should be moved to instances of theGraph.Of course, the
Eq vmakes sense at some of the methods (e.g.removeVertex) but definitely not all.