是否有 C++'s std::bind2nd 的内置 Haskell 等效项?

发布于 2024-07-13 04:03:37 字数 468 浏览 2 评论 0原文

我缺少的是部分应用函数的第二个参数而不是第一个参数的能力。 当我想将函数传递给诸如 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

What I'm missing is the ability to partially apply the second argument of a function rather than the first. This is especially useful when I want to pass the function to something like map, but without having to write a lambda for it each time.

I wrote my own function for this (definition below, just in case there indeed isn't any built-in function for this and anyone else was curious), but I would really like to know if there already exists something in the Prelude for this idiom as I prefer to reuse rather than reinvent.

Here is my definition and a trivial example:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甚是思念 2024-07-20 04:03:37

它称为flip

示例:

Prelude> flip (-) 2 3
1

为了将来参考,只需在 Hoogle 中搜索问题中的类型签名即可找到它,即

It's called flip.

Example:

Prelude> flip (-) 2 3
1

For future reference, it could have been found by simply searching Hoogle for the type signature in your question, namely (a -> b -> c) -> b -> a -> c. :-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文