Указание универсального параметра в двойном списке в F # - PullRequest
0 голосов
/ 03 октября 2019

Я создаю функцию в F #, которая получает список списков и возвращает true, если все списки имеют одинаковую длину, за исключением случаев, когда эта длина равна 0.

Я хочу указать, чтозаписи во внутреннем списке могут быть универсального типа 'T, поэтому я выбрал

let properTable (input : list list<'T>) : bool =
   let lengths = set ([for i in 0..(input.Length-1) -> input.[i].Length])
   not (lengths.Contains(0)) && lengths.Count = 1

При вставке этой функции в F # интерактив я получаю сообщение об ошибке:

stdin (148,35): ошибка FS0010: приложение неожиданного типа в шаблоне. Ожидаемый ')' или другой токен.

Если я заменю тип типом input на int list list, функция работает, но я бы хотел любой тип, а не просто int.

Я могу заставить его работать только с одним списком, как в

let testSingleList (input : list<'T>) : bool =
    input.Length > 0

Как выполнить аналогичную конструкцию, но для списка списков?

1 Ответ

2 голосов
/ 03 октября 2019

Вы смешиваете два разных «стиля» аннотации типа.

Использование

'T list list

или

List<List<'T>>

должно работать.

...