Проблема в том, что ваша функция printNext
принимает параметр типа int -> int -> int
, а метод Random.Next
имеет тип int * int -> int
. То есть вы ожидаете, что функция принимает curry параметров, но обеспечивает функцию, принимающую кортежные параметры.
Проблема в не в том, что компилятор не может найти правильный перегруженный метод, а в том, что нет перегруженного Random.Next
метода, принимающего параметры карри.
Все это может показаться запутанным, и к этому нужно привыкнуть, но карри - довольно приятный инструмент, когда вы его узнаете. Например, он позволяет частичное применение . Проблема, возникающая при переходе на F #, заключается в том, что такой метод, как Random.Next
, изначально был разработан для потребления в C # и, следовательно, не имеет параметров карри.
Обновление: Я забыл фактическое решение вашей проблемы, предоставленное @ 3615. Я добавлю это здесь для завершения, чтобы ничего не брать из ответа @ 3615.
Решение в этом случае - написать оболочку для метода Random.Next
. Если вы будете использовать его несколько раз, вы можете поместить его в переменную - в противном случае просто используйте анонимную функцию. Любое из следующего будет работать
let nextRnd x y = r.Next(x, y)
printNext nextRnd
printNext (fun x y-> r.Next(x,y))