函数上下文中的歧义类型是什么?

时间:2019-02-26 13:30:00

标签: haskell

我正在阅读以下关于功能依赖性的doc。在第5页上,它描述了模棱两可的类型:

  

首先,empty函数的类型不明确:

empty :: Collects e ce ⇒ ce.
     

“模棱两可”是指类型变量e出现在   ⇒符号的左侧,但不在右侧。这个问题   根据Haskell的理论基础   重载,我们不能保证任何语义都定义良好   含糊类型的术语[2,4]。因此,Haskell系统   将拒绝任何定义或使用此类术语的尝试。

我有几个问题:

  1. 什么是模棱两可的类型?
  2. 作者对we cannot guarantee a well- defined semantics for any term with an ambiguous type的含义是什么,这受歧义类型的影响。

1 个答案:

答案 0 :(得分:3)

因此,正如其他人指出的那样,我们不知道e变量,因为它仅出现在左侧:

empty :: Collects e ce ⇒ ce

假设存在两个Collects的实例:

instance Collects Int SomeType
instance Collects Char SomeType

empty应该在这里使用什么实例:

let result = empty :: SomeType

它可以是第一个或第二个。但是由于我们不知道使用哪个模棱两可。