Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 函数上下文中的歧义类型是什么?_Haskell - Fatal编程技术网

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

Haskell 函数上下文中的歧义类型是什么?,haskell,Haskell,我正在阅读以下关于函数依赖性的内容。在第5页,它描述了不明确的类型: 首先,空函数的类型不明确: empty :: Collects e ce ⇒ ce. “不明确”是指有一个类型变量e出现在 左边⇒ 符号,但不在右侧。这个问题是什么 根据Haskell的理论基础,是这样的吗 重载时,我们不能保证对任何 类型不明确的术语[2,4]。因此,Haskell系统 将拒绝任何定义或使用此类术语的尝试 我有几个问题: 什么是确切的不明确类型 作者所说的是什么意思?我们不能保证一个定义良好的 具有不明确类

我正在阅读以下关于函数依赖性的内容。在第5页,它描述了不明确的类型:

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

empty :: Collects e ce ⇒ ce.
“不明确”是指有一个类型变量e出现在 左边⇒ 符号,但不在右侧。这个问题是什么 根据Haskell的理论基础,是这样的吗 重载时,我们不能保证对任何 类型不明确的术语[2,4]。因此,Haskell系统 将拒绝任何定义或使用此类术语的尝试

我有几个问题:

  • 什么是确切的不明确类型
  • 作者所说的
    是什么意思?我们不能保证一个定义良好的
    具有不明确类型的任何术语的语义,即受不明确类型的影响

  • 正如其他人指出的,我们不知道
    e
    变量,因为它只出现在左边:

    empty :: Collects e ce ⇒ ce
    
    假设存在两个
    集合的实例:

    instance Collects Int SomeType
    instance Collects Char SomeType
    
    那么
    empty
    在这里应该使用什么实例:

    let result = empty :: SomeType
    

    它可以是第一个或第二个。但是因为我们不知道该用哪一种,所以它是不明确的。

    不明确类型的定义实际上就在眼前。该类型的变量出现在
    =>
    的左侧,但不在右侧。只需按照以下顺序拼写句子:“通过‘含糊不清’我们的意思是有一个类型变量出现在⇒ 符号,但不在右边(在上面的例子中,该变量被命名为e)。“句子
    的问题是,根据Haskell重载的理论基础,我们不能保证任何具有歧义类型[2,4]的术语都有定义良好的语义。
    的意思是“歧义”只是意味着我们不知道
    e
    代表什么。如果我们不知道
    e
    是什么意思,我们就不知道
    empty
    是什么意思。引文中说“我们不能保证”,因为可能到处都会出现
    empty
    ,它获取元素类型为
    的显式签名:collections Int SomeType=>SomeType
    empty
    是具有已知类型元素的
    insert
    的参数。但是编译器不会冒这个风险,除非您设置
    AllowAmbiguousTypes