gpt4 book ai didi

haskell - Haskell 中的函数依赖

转载 作者:行者123 更新时间:2023-12-04 07:59:34 31 4
gpt4 key购买 nike

我真的无法理解。为什么我们需要它?我的意思是如果我使用相同的类型参数,我认为这意味着它们应该是相同的类型。

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

最后,在 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”类型时,为什么另一个仍然是未解析的“元素”类型?

最佳答案

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

FD 的替代方案是类型族扩展,但并非适用于所有 FD 情况。

关于haskell - Haskell 中的函数依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4278085/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com