Haskell中是否有类似于C++的std::bind2nd的内置函数?

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
1个回答

15

它被称为flip

例如:

Prelude> flip (-) 2 3
1

供日后参考,可以通过在Hoogle中搜索您问题中提到的类型签名来找到答案,即(a -> b -> c) -> b -> a -> c。 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接