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)