extension Optional { static func equals(param: (Wrapped, Wrapped) -> Bool)(_ left: Wrapped?, _ right: Wrapped?) -> Bool { switch (left, right) { case let (.Some(a), .Some(b)): return param(a, b) case (.None, .None): return true default: return false } } }