Remix.run Logo
Someone 3 days ago

Why would

  a + b
suffer more from this than

  plus(a,b)
? In both cases, libraries will only clash if both define a function with the same name taking an A and a B. The only difference is that it is called + in the former case, and plus in the latter.
mojifwisi 2 days ago | parent [-]

It's syntactically more straightforward to resolve the issue of clashing definitions through namespacing with functions compared to operators.

The following is pretty standard:

    foo::plus(a, b) // or foo.plus(a, b)
    bar::plus(a, b) // or bar.plus(a, b)
Whereas this is more awkward:

    a foo::+ b // or a foo.+ b
    a bar::+ b // or a bar.+ b
Someone a day ago | parent [-]

I would think a rule “a module that defines an operator overload must introduce at least one of the types involved” would prevent that problem, and still allow most, if not all, good uses of operator overloading.