Передача универсальной функции в качестве параметра

В последнее время я пытался изучать F# и, исходя из объектно-ориентированного опыта, у меня есть небольшие проблемы с пониманием дженериков в этом одном случае.

Допустим, у меня есть следующие функции:

let genericFunction<'a> (x: 'a) =
    ()

let myFunction (fn: ('a -> unit)) =
    fn 2
    fn 2UL

let test =
    myFunction genericFunction

Как разработчик C# я бы ожидал fn быть универсальной функцией, которая может принимать любой аргумент. Но fn 2 Вызов ограничения общего параметра 'a в int и, следовательно, он не может быть вызван с uint64,

Почему универсальный тип ограничен? Как реализовать это, не передавая две функции?

Компилятор предупреждает об ограничивающих и, наконец, ошибках:

source_file.fs(5,8): warning FS0064: This construct causes code to be less generic than indicated by the type annotations. The type variable 'a has been constrained to be type 'int'.

source_file.fs(6,8): error FS0001: This expression was expected to have type
    int    
but here has type
    uint64    

Вот ошибка: http://rextester.com/RRRWTR28520

0 ответов

Другие вопросы по тегам