 extension Int: _Summable {}
 extension Float: _Summable {}
 extension Double: _Summable {}
+
+internal protocol _Multipliable {
+    static func *(lhs: Self, rhs: Self) -> Self
+}
+extension Int: _Multipliable {}
+extension Float: _Multipliable {}
+extension Double: _Multipliable {}
 
 internal struct GenericRGBA<T> {
     var red: T

    return GenericRGBA<T>(red: lhs.red + rhs.red, green: lhs.green + rhs.green, blue: lhs.blue + rhs.blue, alpha: lhs.alpha + rhs.alpha)
}

extension RGBA {
    internal typealias SummableI = GenericRGBA<Int>
    internal typealias SummableF = GenericRGBA<Float>

    }
    
    internal static func mulI(_ lhs: SummableI, _ rhs: Int) -> SummableI {
        return lhs * rhs
    }
    
    internal static func mulF(_ lhs: SummableF, _ rhs: Float) -> SummableF {
        return lhs * rhs
    }
    
    internal static func mulD(_ lhs: SummableD, _ rhs: Double) -> SummableD {
        return lhs * rhs
    }
}

