import Foundation enum ComparisonOperators: String, CaseIterable { case greater = ">" case greaterOrEqual = ">=" case less = "<" case lessOrEqual = "<=" var function: Function { OverloadedFunction( functions: [ makeFunction() as FunctionBinary, makeFunction() as FunctionBinary, makeFunction() as FunctionBinary, ], makeError: { ExpressionError.unsupportedType(op: rawValue, args: $0) } ) } private func makeFunction() -> FunctionBinary { FunctionBinary { switch self { case .greater: $0 > $1 case .greaterOrEqual: $0 >= $1 case .less: $0 < $1 case .lessOrEqual: $0 <= $1 } } } }