Как уже отмечали другие, предоставление явных типов вашим функциям или списку решит вашу проблему. Причина этого заключается в том, что функции могут иметь универсальные типы, а (вообще говоря) значения не могут. Компилятор сделал вывод, что обе ваши функции имеют тип 'a -> 'a
для любого типа 'a
. Это означает, что ваш список будет иметь тип ('a -> 'a) list
, который является универсальным типом и недопустим для значения. Указание явного типа, такого как let listOfStuff : (int -> int) list = ...
, разрешит неоднозначность.
Сказав это, обратите внимание, что я не могу воспроизвести эту точную проблему в последней версии компилятора (F # 2.0.0.0). Похоже, что выражения списка можно обобщить (предположительно, поскольку они не имеют побочных эффектов). Однако я вижу аналогичную ошибку, когда вместо этого использую выражение массива.