Haskell中的功能依赖

前端之家收集整理的这篇文章主要介绍了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的情况.

原文链接:https://www.f2er.com/javaschema/281518.html

猜你在找的设计模式相关文章