 
 
 
-
-


// partially from source: http://natecook.com/blog/2014/08/generic-functions-for-incompatible-types/

protocol NumericType {
    
    func &+(lhs: Self, rhs: Self) -> Self
    func &-(lhs: Self, rhs: Self) -> Self

}

extension NumericType {
    
    static var range : Range<Self> {
        return Self.min...Self.max
    }
    
    func abs() -> Self {
        return (self < Self(0) ? Self(0) - self : self)
