Я практически ничего не знаю о F #. Я даже не знаю синтаксиса, поэтому не могу привести примеры.
В потоке комментариев упоминалось, что F # может объявлять функции, которые могут принимать параметры нескольких возможных типов, например строку или целое число. Это было бы похоже на перегрузку методов в C #:
public void Method(string str) { /* ... */ }
public void Method(int integer) { /* ... */ }
Однако в CIL вы не можете объявить делегат этой формы. У каждого делегата должен быть один, конкретный список типов параметров. Однако, поскольку функции в F # являются первоклассными гражданами, может показаться, что вы должны иметь возможность передавать такую функцию, и единственный способ скомпилировать ее в CIL - использовать делегаты.
Итак, как F # компилирует это в CIL?