4

我缺少的是部分应用函数的第二个参数而不是第一个参数的能力。当我想将函数传递给 map 之类的东西时,这特别有用,但不必每次都为它编写 lambda。

我为此编写了自己的函数(定义如下,以防万一确实没有任何内置函数,并且其他人对此感到好奇),但我真的很想知道 Prelude 中是否已经存在为此成语,因为我更喜欢重用而不是重新发明。

这是我的定义和一个简单的例子:

bind2nd :: (a -> b -> c) -> b -> a -> c
bind2nd f b = \a -> f a b

foo :: Int -> Bool -> String
foo n b | b = show n
        | otherwise = "blabla"

alwaysN :: Int -> String
alwaysN = bind2nd foo True
4

1 回答 1

15

它被称为flip

例子:

Prelude> flip (-) 2 3
1

为了将来参考,只需在Hoogle中搜索您问题中的类型签名即可找到它,即(a -> b -> c) -> b -> a -> c。:-)

于 2009-01-30T20:37:56.853 回答