diku-dk / futhark

:boom::computer::boom: A data-parallel functional programming language
http://futhark-lang.org
ISC License
2.37k stars 164 forks source link

Operator overloading? #2174

Open entropylost opened 3 weeks ago

entropylost commented 3 weeks ago

Is there any way to have operator overloading?

For example, if I have a vector type with a def (+) (a: Vector) (b: Vector): Vector, I'd like to be able to use it and other + definitions without having to do vector.+ everywhere.

This could be implemented by just making a list of function definitions and scanning until you find one that typechecks, but that might result in code instability. Alternatively, typeclasses could be used like haskell, although I feel like that'd be quite an effort to make.

athas commented 3 weeks ago

There is no operator overloading in Futhark.

In the long term, we have considered adding type classes, but we haven't considered a specific design yet. I think we are waiting for OCaml to figure out how it fits nicely with a module system.

Local opens can be used to reduce the boilerplate slightly. Instead of x vector.+ y vector.+ z you could write vector.(x + y + z).