加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

Haskell中的功能依赖

发布时间:2020-05-24 02:22:15 所属栏目:程序设计 来源:互联网
导读:我真的不明白.为什么我们需要它呢?我的意思是如果我使用相同的类型参数,我认为这意味着它们应该是相同的类型. 我听说它可以帮助编译器避免无限循环.有人可以告诉我一些更多细节吗? 最后,我们应该遵循Real World Haskell中功能依赖的使用的任何“模式和实践

我真的不明白.为什么我们需要它呢?我的意思是如果我使用相同的类型参数,我认为这意味着它们应该是相同的类型.

我听说它可以帮助编译器避免无限循环.有人可以告诉我一些更多细节吗?

最后,我们应该遵循Real World Haskell中功能依赖的使用的任何“模式和实践”吗?

[后续问题]

class Extract container element where
  extract :: container -> element

instance Extract (a,b) a where
  extract (x,_) = x

在上面的代码中,我对容器和元素使用了相同的类型变量’a’,我认为编译器可以因此推断这两种类型是相同的类型.

但是当我在GHCi中尝试这个代码时,我收到了以下反馈:

*Main> extract('x',3)
<interactive>:1:0:
    No instance for (Extract (Char,t) element)
      arising from a use of `extract' at <interactive>:1:0-13
    Possible fix:
      add an instance declaration for (Extract (Char,t) element)
    In the expression: extract ('x',3)
    In the definition of `it': it = extract ('x',3)

当其中一个被指定为类型’Char’时,为什么另一个仍未解析类型’element’?

我认为 explains相当不错.所以基本上如果你的FD关系为 – > b所有这意味着对于类型类实例,只有一个’b’与任何’a’所以Int Int但你也不能有Int Float.这就是他们所说的’b’是由’a’唯一确定的意思.这扩展到任意数量的类型参数.它需要的原因是1.类型推断2.有时候你需要这样的约束.

FD的替代方案是类型系列扩展,但不是所有FD的情况.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读