是否有一个标准的 Haskell 函数(或模式)来提取列表的内容并将它们提供给函数,就好像它们是函数的有序位置参数一样?
例如,考虑函数(,)
当给定两个位置参数时,将从它们中生成一个二元组:
(,) 3 4 --> (3,4)
假设我有一些我无法更改的外部函数调用给我的参数,表示为列表[3, 4]
.
是否有“内容”操作,这样就可以工作:
(,) $ contents_of [3, 4]
使得动作contents_of
行为就像这些项目被放置在源代码中一样,它们之间有空格作为函数应用程序?
例如,(,) $ contents_of [1]
应该是柯里化函数((,) 1)
然后又需要一个参数来完成元组的创建。
我的一个想法是尝试将函数折叠到列表上,用折叠函数表达柯里化:
foldr (\x y -> y x) (,) [3, 4]
但看看类型签名foldr
:
foldr :: (a -> b -> b) -> b -> [a] -> b
让这看起来很困难。b
这里需要是函数类型本身,但是当它被应用于参数时,它不会是具有相同类型签名的函数b
太长了,会导致折叠中的类型问题。
这在本质上与 Python 类似*args
构造。
我不关心这可能暗示的严格性属性——只关心这样的事情在标准 Haskell 中是否可能。