     }
 }
 
+public func ==(lhs: Coordinate2D, rhs: Coordinate2D) -> Bool {
+    return lhs.x == rhs.x && lhs.y == rhs.y
+}

    }
}

public func ==(lhs: Coordinate2D, rhs: Coordinate2D) -> Bool {
    return lhs.x == rhs.x && lhs.y == rhs.y
}

extension Coordinate2D : CustomStringConvertible, CustomDebugStringConvertible {

 
    Low level 2 dimensional Coorodinate type
 */
public final class Coordinate2D : Coordinate {
    
    public let x: Double
    public let y: Double
    
    public required init(x: Double, y: Double) {
        self.x = x
        self.y = y
    }

    public required init(other: Coordinate2D) {
        self.x = other.x
        self.y = other.y
