 /// :nodoc:
 extension CIVector: Interpolatable {
 
-    public static func interpolate(with ease: Ease,
-                                   startValue: CIVector, endValue: CIVector,
+    public static func interpolate(_ startValue: CIVector, to endValue: CIVector, with ease: Ease,
                                    elapsed: TimeInterval, duration: TimeInterval) -> CIVector {
 
         let interpolate: (CGFloat, CGFloat) -> CGFloat = { (start, end) in

/// :nodoc:
extension Interpolatable where Self: SignedInteger {

    public static func interpolate(with ease: Ease,
                                   startValue: Self, endValue: Self,
                                   elapsed: TimeInterval, duration: TimeInterval) -> Self {

        let start = Double(signedInteger: startValue)
        let end = Double(signedInteger: endValue)
        let value = ease.interpolate(startValue: start, endValue: end,
                                     elapsed: elapsed, duration: duration)


/// :nodoc:
extension Interpolatable where Self: FloatingPoint {

    public static func interpolate(_ startValue: Self, to endValue: Self, with ease: Ease,
                                   elapsed: TimeInterval, duration: TimeInterval) -> Self {

        return ease.interpolate(startValue: startValue, endValue: endValue,
