gpt4 book ai didi

haskell - 容器元素类型

转载 作者:行者123 更新时间:2023-12-02 21:27:56 24 4
gpt4 key购买 nike

在某种程度上,这是我之前问题的倒退,但是......有人可以提醒我为什么这不起作用吗?

class Container c e where  empty :: c  insert :: e -> c -> cinstance Container [x] x where  empty = []  insert = (:)instance Container ByteString Word8 where  empty = BIN.empty  insert = BIN.consinstance Ord x => Container (Set x) x where  empty = SET.empty  insert = SET.insert

显然,如果这么简单,就没有人会费心去发明函数依赖或关联类型。那么上面的问题出在哪里呢?

最佳答案

没有什么可以阻止您添加instance Container [Int] Intinstance Container [Int] Char,并且当您要求empty::时[Int]编译器无法知道它应该来自哪个实例。

“啊,但我只有实例Container [Int] Int,”你说。 “无论如何,实例容器 [Int] Char 都会是一个错误。”

但是编译器无法知道您将来不会添加实例Container [Int] Char,如果您这样做了,也不允许它破坏您现有的代码。

所以我们需要某种方式告诉编译器

  • Container的第一个参数唯一确定Container的第二个参数
  • 如果它看到仅第二种类型不同的不同实例,则表明存在错误

输入函数依赖关系。

关于haskell - 容器元素类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9078168/

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