gpt4 book ai didi

haskell - zipWith ($) 柯里化(Currying)的解释

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

我一直在尝试理解这段代码,但我无法清楚地概括它:

ghci > :t zipWith
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
ghci > :t ($)
($) :: (a -> b) -> a -> b
ghci > let c = zipWith ($)
ghci > :t c
c :: [b -> c] -> [b] -> [c]

[b -> c] 是如何在上述类型签名中产生的?

最佳答案

为了让 zipWith ($) 进行类型检查,我们必须将 zipWith 的第一个参数的类型与 的类型统一>($)。我会将它们一起写出来,并使用独特的名称,以使其更加清晰。

zipWith :: (a        -> b -> c) -> [a]     -> [b] -> [c]
($) :: ((x -> y) -> x -> y)

因此,zipWith 进行类型检查当且仅当我们可以假设 a ~ (x -> y)b ~ xc~y。没有什么可以阻止这种统一的成功,因此我们可以将这些名称替换回 zipWith 的类型。

zipWith :: ((x -> y) -> x -> y) -> [x -> y] -> [x] -> [y]
($) :: ((x -> y) -> x -> y)

然后继续申请,因为现在一切都很好

zipWith ($) :: [x -> y] -> [x] -> [y]

这相当于您所看到的类型变量名称的具体选择。

关于haskell - zipWith ($) 柯里化(Currying)的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130559/

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