如何在Haskell中简化字符串连接?

时间:2016-03-21 00:18:24

标签: haskell

我有这个功能:

MyModel.update({}, {$inc: {Field: 1}}, {multi: true), function(err) { ... });

有没有办法简化它?我认为这可能与运营商“。”有关。但我无法弄清楚如何在这里应用它。

1 个答案:

答案 0 :(得分:10)

currying的魔力:

myF :: String -> String
myF = (++) "const"

或(如@jamshidh所述)

myF :: String -> String
myF = ("const" ++)

<强>解释

我们说(++)是一个函数需要两个参数,但实际上Haskell中的所有函数只接受一个参数。让我们看一下(++)函数的签名:

(++) :: String -> String -> String

我们可以描述(++)或&#34;串联&#34;功能如下:

  

&#34;取一个字符串并返回一个带另一个字符串的函数   连接(连接在一起)两个字符串并返回该字符串&#34;

因此,当我们说myF = (++) "const"时,我们将结果函数分配给将第一个字符串应用于(++)函数到myF函数。这称为&#34;部分应用&#34;

请注意,我们不需要在函数末尾包含一个参数,但这仍然完全正常:

myF arg = "const" ++ arg

我们可以省去&#34; arg&#34;因为部分应用&#34; concat&#34;函数我们已经知道我们还需要一个字符串参数。