ocaml 中的 ('an * 'a) 列表和 'an * 'a 列表有什么区别?
What is the difference between ('a * 'a) list and 'a * 'a list in ocaml?
我正在尝试删除 string * string list
类型的列表(其他函数需要其类型),但我不断收到类型不匹配错误。如果我将一个列表定义为
let a = [("a" , "b")]
,
当我将它传递给需要类型 string * string list
:
的函数时出现错误
Error: This expression has type (string * string) list
but an expression was expected of type string * string list
将其声明为 let a = ["a" , "b"]
时会发生同样的错误。为什么会这样?
('a * 'a) list
是 ('a * 'a)
元组的列表,而 'a * 'a list
是 'a
的元组和 'a
的列表。
您误读了类型:类型应用程序比产品绑定得更紧,因此
string * string list
表示
string * (string list)
例如:
let x: string * string list = "a", ["b"]
与
相比
let y : (string * string) list = ["a", "b"; "c", "d"]
我正在尝试删除 string * string list
类型的列表(其他函数需要其类型),但我不断收到类型不匹配错误。如果我将一个列表定义为
let a = [("a" , "b")]
,
当我将它传递给需要类型 string * string list
:
Error: This expression has type (string * string) list
but an expression was expected of type string * string list
将其声明为 let a = ["a" , "b"]
时会发生同样的错误。为什么会这样?
('a * 'a) list
是 ('a * 'a)
元组的列表,而 'a * 'a list
是 'a
的元组和 'a
的列表。
您误读了类型:类型应用程序比产品绑定得更紧,因此
string * string list
表示
string * (string list)
例如:
let x: string * string list = "a", ["b"]
与
相比let y : (string * string) list = ["a", "b"; "c", "d"]