gpt4 book ai didi

haskell - Pointfree(或库)函数,用于将两个函数应用于单个输入

转载 作者:行者123 更新时间:2023-12-04 04:47:52 24 4
gpt4 key购买 nike

我一直在重用 lambda 表达式,例如

\x -> (f x, g x)

我将相同的输入应用于两个函数并将结果封装成一对。我可以写一个函数来捕捉这个
combine :: (a -> b) -> (a -> c) -> a -> (b,c)
combine f g x = (f x, g x)

现在上面的 lambda 表达式只是 combine f g .我有两个问题。
  • 我很想知道是否有一个标准库函数可以做到这一点,而我只是找不到。
  • 出于好奇,我想以无点风格重写此功能,但我遇到了很多麻烦。
  • 最佳答案

  • Control.Arrow有功能 (&&&) 为了这。它有一个“更通用”的类型,不幸的是,这意味着 Hoogle 没有找到它(也许这应该被认为是 Hoogle 中的一个错误?)。
  • 您通常可以使用 pointfree 自动计算出这种情况。 , 其中 lambdabot#haskell有作为插件。

  • 例如:
    <shachaf> @pl combine f g x = (f x, g x)
    <lambdabot> combine = liftM2 (,)

    在哪里 liftM2(r ->) Monad 的实例有类型 (a -> b -> c) -> (r -> a) -> (r -> b) -> r -> c .当然,根据您允许的原语,还有许多其他的无点编写方式。

    关于haskell - Pointfree(或库)函数,用于将两个函数应用于单个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14350871/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com