Is the "favoring" hack the reason that ==(Expr, Expr) is preferred over ==(Expr,String) and ==(Expr, Double) here?
struct Expr: ExpressibleByStringLiteral, ExpressibleByFloatLiteral {
init(floatLiteral value: Double) { }
init(stringLiteral value: String) { }
init() { }
static func == (lhs: Expr, rhs: Expr) -> Bool { true }
static func == (lhs: Expr, rhs: Double) -> Bool { false }
static func == (lhs: Expr, rhs: String) -> Bool { false }
}
let expr = Expr()
print(expr == "42") // true, uses ==(Expr, Expr)
print(expr == 42.0) // true, uses ==(Expr, Expr)