gpt4 book ai didi

haskell - 用无点样式写 f?

转载 作者:行者123 更新时间:2023-12-02 02:48:30 25 4
gpt4 key购买 nike

说我有功能

g :: a -> b, h :: a -> c 


f :: b -> c -> d. 

可以写函数吗
 f' :: a -> a -> d 


f' x y = f (g x) (h y) 

在无点风格?

可以写函数
f' a -> d, f' x = f (g x) (h x) 

通过设置以无点样式
f' = (f <$> g) <*> h  

但我不知道如何做更一般的情况。

最佳答案

我们有:

k x y = (f (g x)) (h y)

我们想写 k无点风格。

第一个参数传递给 kx .我们需要用 x 做什么?好吧,首先我们需要调用 g就可以了,然后 f , 然后做一些花哨的事情来将它应用到 (h y) .
k = fancy . f . g

这是什么 fancy ?好:
k x y = (fancy . f . g) x y
= fancy (f (g x)) y
= f (g x) (h y)

所以我们渴望 fancy z y = z (h y) .减少 Eta,我们得到 fancy z = z . h , 或 fancy = (. h) .
k = (. h) . f . g

一种更自然的思考方式可能是
                             ┌───┐           ┌───┐
x ───│ g │─── g x ───│ │
/ └───┘ │ │
(x, y) │ f │─── f (g x) (h y)
\ ┌───┐ │ │
y ───│ h │─── h y ───│ │
└───┘ └───┘

└──────────────────────────────┘
k

输入 Control.Arrow :
k = curry ((g *** h) >>> uncurry f)

关于haskell - 用无点样式写 f?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38743576/

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