func NewLabeledArc(u, v Vertex, label string) LabeledArc {
	return baseLabeledArc{baseArc{baseEdge{u: u, v: v}}, label}
}
Create a new labeled arc.
package gogl
type Edge interface {
	Both() (u Vertex, v Vertex)  
}
type Arc interface {
	Both() (u Vertex, v Vertex)  
	Source() Vertex
	Target() Vertex
}
type WeightedEdge interface {
	Edge
	Weight() float64
}
type WeightedArc interface {
	Arc
	Weight() float64
}
type LabeledEdge interface {
	Edge
	Label() string
}
type LabeledArc interface {
	Arc
	Label() string
}
type DataEdge interface {
	Edge
	Data() interface{}
}
type DataArc interface {
	Arc
	Data() interface{}
}
type baseEdge struct {
	u Vertex
	v Vertex
}
func (e baseEdge) Both() (Vertex, Vertex) {
	return e.u, e.v
}
func NewEdge(u, v Vertex) Edge {
	return baseEdge{u: u, v: v}
}
type baseArc struct {
	baseEdge
}
func (e baseArc) Source() Vertex {
	return e.u
}
func (e baseArc) Target() Vertex {
	return e.v
}
func NewArc(u, v Vertex) Arc {
	return baseArc{baseEdge{u: u, v: v}}
}
type baseWeightedEdge struct {
	baseEdge
	w float64
}
func (e baseWeightedEdge) Weight() float64 {
	return e.w
}
func NewWeightedEdge(u, v Vertex, weight float64) WeightedEdge {
	return baseWeightedEdge{baseEdge{u: u, v: v}, weight}
}
type baseWeightedArc struct {
	baseArc
	w float64
}
func (e baseWeightedArc) Weight() float64 {
	return e.w
}
func NewWeightedArc(u, v Vertex, weight float64) WeightedArc {
	return baseWeightedArc{baseArc{baseEdge{u: u, v: v}}, weight}
}
type baseLabeledEdge struct {
	baseEdge
	l string
}
func (e baseLabeledEdge) Label() string {
	return e.l
}
func NewLabeledEdge(u, v Vertex, label string) LabeledEdge {
	return baseLabeledEdge{baseEdge{u: u, v: v}, label}
}
type baseLabeledArc struct {
	baseArc
	l string
}
func (e baseLabeledArc) Label() string {
	return e.l
}