在Haskell中应用函数并在元组中换行

在Haskell中应用函数并在元组中换行,haskell,Haskell,我正在寻找一种方法来编写一个应用提供的函数并将参数和函数结果封装在元组中的函数。例如: applyZip :: (a -> b) -> a -> (a,b) applyZip f x = (x, f x) 有没有更惯用的方法用Haskell编写,最好是用库代码 编辑: 我只是对解决这个问题的其他方法感兴趣。如果您发现自己也遇到了同样的问题,最好使用描述性名称自己实现该函数。您可以使用: import Control.Monad(ap) applyZip :: (a ->

我正在寻找一种方法来编写一个应用提供的函数并将参数和函数结果封装在元组中的函数。例如:

applyZip :: (a -> b) -> a -> (a,b)
applyZip f x = (x, f x)
有没有更惯用的方法用Haskell编写,最好是用库代码

编辑: 我只是对解决这个问题的其他方法感兴趣。如果您发现自己也遇到了同样的问题,最好使用描述性名称自己实现该函数。

您可以使用:

import Control.Monad(ap)

applyZip :: (a -> b) -> a -> (a,b)
applyZip = ap (,)
import Control.Monad(ap)
applyZip::(a->b)->a->(a,b)
applyZip=ap(,)

这里我们使用函数。

我认为您的
applyZip
已经足够好了,但是
(id&&&&)
也可以使用(使用
(&&&&&&&)
来自
Control.Arrow
。我想说,代码已经达到了它所能达到的水平。用库函数实现同样的东西只会让人困惑,IMHO。除非对构造有更高的意义,而使用库函数会使其更为明显。相关:你能详细说明一下为什么这样做吗?我知道很长一段时间,但失败了。@peri4n:当然,但给我一些时间(目前很忙)。@peri4n
ap
在阅读器中,monad是S的组合符,如果这有帮助的话<代码> AP:(R-> A -> B)->(R-> A)->(R-> B)(你应该能够实现这个类型,而不用太多的思考,只要“匹配类型”)。等价于没有导入(在GHC 8中):<代码> Apple Yip=((,))< /代码>在实际代码中,我认为这是故意混淆。P(+1)