C ++的std :: bind2nd是否有内置的Haskell等价物?

时间:2009-01-30 20:31:29

标签: haskell bind2nd

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

我为此编写了我自己的函数(下面的定义,以防万一没有任何内置函数,其他任何人都很好奇),但我真的想知道是否已经存在这个成语的前奏因为我更喜欢重用而不是重新发明。

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

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

1 个答案:

答案 0 :(得分:15)

它被称为flip

示例:

Prelude> flip (-) 2 3
1

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