Информация о типе F#

Эта простая функция

let s =
    function
    | [] -> [[]]
    | list -> []::list

имеет тип ('Список списка -> ' Список списка). Таким образом, поскольку 'a является общим, он принимает списки af произвольной глубины в качестве аргумента. Моя проблема в том, что я всегда должен указывать глубину списка ввода, иначе F# будет пожаловаться на интерактив. например

s []

не будет работать пока

s ([]: int List List)

будут. Так же,

s [[[]]]

не будет работать, но

s ([[[]]]:int List List List)

делает. Итак, это всего лишь пример, есть ли способ вообще избежать такой явной типизации?

Спасибо

1 ответ

Здесь проблема. Какой тип

s [[[]]]

это 't list list, Из-за некоторых базовых ограничений.NET такое значение не может существовать. Вам нужно сделать 't бетон.

Существует множество отличных руководств по ограничению значений F#, и лучшее решение - просто использовать ваш результат позже в том же файле или предоставить какой-то другой способ для вывода конкретного типа.

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