F# 中 OCaml 样式泛型类型参数的语法是什么?
What is the syntax for OCaml style generic type parameters in F#?
根据this answer,F#支持OCaml风格的类型参数。问题中的例子是:
type 'a NestedList = List of 'a NestedList list | Elem of 'a
但是,我在 F# 文档的任何地方都找不到这种语法的记录,而且,我无法让 F# 编译器接受我给 link 的答案中的语法。
编译器不接受这种使用多个参数的尝试:
type ('a * 'b) SomeType = ('a * 'b)
然而,这有效:
type ('a , 'b) SomeType = ('a * 'b)
let x:SomeType<int,int> = (4,5)
根据 Rider 在 x 上方显示的类型注释,我假设这是公认的语法,但我想知道这是在哪里记录的,以及我是否做对了。
你是对的。您 link 的答案是错误的。 type ('a * 'b) someType
在 OCaml 中也无效。多个类型参数也应该用逗号分隔:type ('a, 'b) someType
.
F# 语言(包括其语法)在 The F# Language Specification 中指定。请特别参阅第 5 章(在 4.1 规范中)了解类型的语法和第 8 章了解类型定义。
根据this answer,F#支持OCaml风格的类型参数。问题中的例子是:
type 'a NestedList = List of 'a NestedList list | Elem of 'a
但是,我在 F# 文档的任何地方都找不到这种语法的记录,而且,我无法让 F# 编译器接受我给 link 的答案中的语法。 编译器不接受这种使用多个参数的尝试:
type ('a * 'b) SomeType = ('a * 'b)
然而,这有效:
type ('a , 'b) SomeType = ('a * 'b)
let x:SomeType<int,int> = (4,5)
根据 Rider 在 x 上方显示的类型注释,我假设这是公认的语法,但我想知道这是在哪里记录的,以及我是否做对了。
你是对的。您 link 的答案是错误的。 type ('a * 'b) someType
在 OCaml 中也无效。多个类型参数也应该用逗号分隔:type ('a, 'b) someType
.
F# 语言(包括其语法)在 The F# Language Specification 中指定。请特别参阅第 5 章(在 4.1 规范中)了解类型的语法和第 8 章了解类型定义。