 }
 
 @discardableResult
-public func =><Input>(lhs: MTIImage, rhs: Input) -> Input where Input: InputPort, Input.Value == MTIImage? {
+public func =><Output, Input>(lhs: Output, rhs: Input) -> Input where Input: InputPort, Output: OutputPortProvider, Output.Port.Value == Input.Value, Input.Value == MTIImage? {
     lhs.outputPort.connect(to: rhs)
     return rhs
 }
 
 @discardableResult
-public func =><Input>(lhs: MTIImage, rhs: Input) -> Input where Input: MTIUnaryFilter {
+public func =><Output, Input>(lhs: Output, rhs: Input) -> Input where Input: MTIUnaryFilter, Output: OutputPortProvider, Output.Port.Value == MTIImage? {
     lhs.outputPort.connect(to: rhs.ioPort)
+    return rhs
+}
+
+@discardableResult
+public func =><Output, Input>(lhs: Output, rhs: Input) -> Input where Output: MTIFilter, Input: InputPort, Input.Value == MTIImage? {
+    lhs.outputPort.connect(to: rhs)
     return rhs
 }
 

    }
}

infix operator =>: AdditionPrecedence

extension OutputPort where Value == MTIImage? {

@discardableResult
public func =><Output, Input>(lhs: Output, rhs: Input) -> Input where Output: OutputPort, Input: MTIUnaryFilter, Output.Value == MTIImage? {
    lhs.connect(to: rhs.ioPort)
    return rhs
}

