gpt4 book ai didi

haskell - 如何部分应用翻转功能?

转载 作者:行者123 更新时间:2023-12-01 06:54:39 24 4
gpt4 key购买 nike

我对翻转的“部分”应用可能会做什么有点困惑。

由于 flip 的类型功能是:

flip :: (a -> b -> c) -> b -> a -> c

我们可以不用括号写成:
flip :: a -> b -> c -> b -> a -> c

我怎样才能将它部分应用到第一个参数 a ?要获取具有以下类型的函数:
flipa ::     b -> c -> b -> a -> c

还是没有意义?

例如,如果我有类似的东西:
let foo a b = (Just a, b)
:t foo
> foo:: a -> t -> (Maybe a, t)

部分应用它是有意义的:
let a = foo 1
:t a
a :: t -> (Maybe Integer, t)

最佳答案

这没有意义。签名

f :: a -> b -> c

相当于
f :: a -> (b -> c)

并且不等于
f :: (a -> b) -> c

这个约定是为什么你可以首先在 Haskell 中部分应用函数的原因。由于默认情况下所有函数都是柯里化(Currying)的,因此签名 f :: a -> b -> c可以解释为

f takes a and b, and returns c



或者可以同样有效地解释为

f takes a, and returns a function that takes b and returns c

关于haskell - 如何部分应用翻转功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433500/

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