【发布时间】:2015-01-21 23:56:55
【问题描述】:
在类型签名上编写上下文时,通常我会这样做
f :: (Enum a, Ord a) => a -> a
但由于运气不佳,我发现它可以编译并且似乎工作相同,至少在 GHC 7.8 上:
f :: Enum a => Ord a => a -> a
两者在理论上或实践上有什么区别?第二个不那么正统吗? Haskell report 似乎没有提到第二种形式,而且我从未见过它在任何地方使用过。 Related question.
【问题讨论】:
-
SPJ 做过一次讲座,他解释了约束编译到的内容。 youtube.com/watch?v=6COvD8oynmI - 简而言之,它们本身就是函数参数。