在 F# 中的双列表中指定泛型参数

Specifying a generic parameter in a double list in F#

我正在 F# 中创建一个函数,它被给定一个列表列表,如果所有列表的长度都相同,则 returns 为真,除非此长度为 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# interactive 中时,出现错误消息:

stdin(148,35):错误 FS0010:模式中的意外类型应用程序。应为 ')' 或其他标记。

如果我将 input 的类型替换为 int list list,该函数有效,但我想要任何类型,而不仅仅是 int.

我可以让它只使用一个列表,如

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

除了列表的列表,我如何完成类似的构造?

您混合了两种不同的 "styles" 类型注释。

使用其中之一

'T list list

List<List<'T>>

应该可以。