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

/// :nodoc:
extension UIOffset: Interpolatable {

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

        let interpolate: (CGFloat, CGFloat) -> CGFloat = { (start, end) in

/// A protocol to provide interpolation functionality.
public protocol Interpolatable {

    associatedtype Value

    /**
     A class method to calculate the value between a starting and ending 
     position at a specific point in time.

     - Parameters:
        - startValue: The start value passed to the `ease` algorithm.
        - endValue: The end value passed to the `ease` algorithm.
        - ease: The `Ease` used to interpolate values.
        - elapsed: The elapsed amount of time passed to the `ease` algorithm.
        - duration: The duration of time passed to the `ease` algorithm.

     - Returns: The value interpolated between the start and end value.
     */
    static func interpolate(_ startValue: Value, to endValue: Value, with ease: Ease,
                            elapsed: TimeInterval, duration: TimeInterval) -> Value

}

