如何在Haskell中自由地实现f(gx)(hx)?

awl*_*wer 1 haskell pointfree

这个答案中,我们学习了如何\x y z -> f x (g y z)在Haskell中以无意义的方式实现该函数,其中fg是函数.我的问题是

如何\x -> f (g x) (h x)在Haskell中以无点的方式编写函数?以下是定义的f g h函数f (g x) (h x).

我目前想到的想法如下.

uncurry f (mapTuple ($ x) (g, h))
Run Code Online (Sandbox Code Playgroud)

但是几次尝试表明这是错误的; 甚至部分map ($ x) [g, h]可疑:如果gh有不同的范围?

此外,可读性在这里不是一个问题.

任何帮助都是真诚的感谢.

lef*_*out 6

箭头的版本将是

uncurry f . (g &&& h)
Run Code Online (Sandbox Code Playgroud)

要么

(g &&& h) >>> uncurry f
Run Code Online (Sandbox Code Playgroud)

如图:

        g ????
       ?          ?
???? &&&      >>>  uncurry f ???
       ?          ?
        h ???? 
Run Code Online (Sandbox Code Playgroud)