Информация о типе 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#, и лучшее решение - просто использовать ваш результат позже в том же файле или предоставить какой-то другой способ для вывода конкретного типа.