对于函数
f :: a->b->c
是否可以编写函数g,以便调用(f g
)具有类型c?
具体来说,如果我有一个数据类型data Example = Example String String
,构造函数Example
属于类型String->String->Example
,那么有没有一种方法可以让函数“立即”生成两个参数,而不必返回一个元组并将其分开或其他东西类似?
我尝试将 g 作为
g::a->b
,但这不起作用(并且没有意义,因为对于 f 来说,有一个必要的值,而 g 没有编码 a 的任何值),但是从单独打字,这似乎是作为 g 类型唯一合理的选择。
不。不过,您可以将
f
传递给另一个函数 - 也许是 g
本身,也许是其他类似 uncurry
的东西。
ghci> :t uncurry f
uncurry f :: (a, b) -> c
ghci> let g = ("foo", 5)
ghci> uncurry f g