  implement this protocol if the `edgeExists` function is not reflexive, i.e. if
  the edges have an associated direction.
 */
-protocol DirectedGraph: Graph { }
+public protocol DirectedGraph: Graph { }
 
 /**
  Description of a weighted graph.
 
  Weighted graphs have a weight associated with each edge.
 */
-protocol WeightedGraph: Graph {
+public protocol WeightedGraph: Graph {
     /**
      Computes the weight associated with the given edge.
 

   
     Changes the graph in-place to add the edges.

     - parameter from: One of the vertices to add

     - throws: `GraphError.VertexNotPresent` if either vertex is not in the
       graph.

}

// Provides a default implementation for the `neighbors` function.
public extension Graph {
    public func neighbors(vertex vertex1: Vertex) throws -> [Vertex] {
        var neighbors: [Vertex] = []

        for vertex2 in vertices {
