In F#, it’s possible to write both object-oriented and/or functional programs. This means that a task that would be straight-forward in C++, defining an abstract interface containing overloaded methods, is also possible in F#. However, you have to get the syntax exactly right, otherwise you get obscure compiler errors which could mis-lead you into thinking it isn’t possible after all. For example, to use overloads, you must define multi-parameter methods using tuples.

Note the syntax of the abstract method declarations carefully. As per this helpful post on StackOverflow, putting brackets around the tuple changes the signature and leads to confusing compiler errors:

Whilst it’s possible to implement the interface above and call into it, the syntax to do so involves additional brackets and is unnecessarily clunky. The syntax at the top of this article is preferable: