我正在阅读以下关于功能依赖性的doc。在第5页上,它描述了模棱两可的类型:
首先,empty函数的类型不明确:
empty :: Collects e ce ⇒ ce.
“模棱两可”是指类型变量e出现在 ⇒符号的左侧,但不在右侧。这个问题 根据Haskell的理论基础 重载,我们不能保证任何语义都定义良好 含糊类型的术语[2,4]。因此,Haskell系统 将拒绝任何定义或使用此类术语的尝试。
我有几个问题:
we cannot guarantee a well- defined
semantics for any term with an ambiguous type
的含义是什么,这受歧义类型的影响。答案 0 :(得分:3)
因此,正如其他人指出的那样,我们不知道e
变量,因为它仅出现在左侧:
empty :: Collects e ce ⇒ ce
假设存在两个Collects
的实例:
instance Collects Int SomeType
instance Collects Char SomeType
empty
应该在这里使用什么实例:
let result = empty :: SomeType
它可以是第一个或第二个。但是由于我们不知道使用哪个模棱两可。