gpt4 book ai didi

Haskell 多重上下文 - 柯里化(Currying)?

转载 作者:行者123 更新时间:2023-12-02 07:08:04 24 4
gpt4 key购买 nike

在类型签名上编写上下文时,通常我会做类似的事情

f :: (Enum a, Ord a) => a -> a

但是纯粹是运气不好,我发现它的编译结果似乎是相同的,至少在 GHC 7.8 上是这样:

f :: Enum a => Ord a => a -> a

两者之间的理论或实践差异是什么?第二个不那么正统吗? Haskell report似乎没有提到第二种形式,而且我从未见过它在任何地方使用过。 Related question .

最佳答案

两个版本是一样的。当约束和 forall -s 尚不存在时,它们会浮出到范围的顶部。例如,以下定义是有效的:

foo :: a -> a -> Num a => a
foo = (+)

bar :: a -> forall b. b -> a
bar = const

但是 :t foo 打印 Num a => a -> a -> a:t bar 打印 a -> b -> a (相当于 forall a b.a -> b -> a)。

GHC 不支持多态返回类型,这就是约束和量词被 float 的原因。我想这也可能是 GHC 抛出错误的有效设计选择。

关于Haskell 多重上下文 - 柯里化(Currying)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069938/

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