元组上的 OCaml 映射

OCaml map on a tuple

我的代码中有几个地方看起来像这样:

let (a,b,c) = (f "a", f "b", f "c")

如果我能这样写就好了:

let (a,b,c) = map f ("a", "b", "c")

OCaml 中是否有这样的方法?

最好的答案是,如果您希望它适用于不同大小的元组,则不能这样做。每个元组大小在 OCaml 中都是不同的类型。所以没有 OCaml 类型代表 "a tuple of any size whose elements are strings."

但实际上这听起来更像是一个列表而不是一个元组。如果可以使用列表而不是元组,则可以使用普通的旧 List.map 函数。

您可以轻松地为一种元素的三元组编写 map

let map_triple f (a, b, c) = (f a, f b, f c)

let a, b, c = map_triple String.length ("foo", "bar", "quux")

但是,它只适用于一个长度的元组。

可以编写一个 GADTified 元组类型并在该类型上编写一个 map ,该类型在元组长度上是多态的,但最好避免这种欺骗,除非优势很大,这似乎不是这里的情况。