Mat*_*hid 7 containers haskell types
在某种程度上,这是我之前的问题的一个倒退,但是...有人可以提醒我为什么这不起作用?
class Container c e where empty :: c insert :: e -> c -> c instance Container [x] x where empty = [] insert = (:) instance Container ByteString Word8 where empty = BIN.empty insert = BIN.cons instance Ord x => Container (Set x) x where empty = SET.empty insert = SET.insert
显然,如果这很容易,没有人会想要发明功能依赖或相关类型.那么上面的问题是什么?
dav*_*420 10
没有什么可以阻止你添加instance Container [Int] Int和instance Container [Int] Char,当你要求empty :: [Int]编译器无法知道它应该来自哪个实例.
"啊,但我只有instance Container [Int] Int,"你说." instance Container [Int] Char无论如何,这将是一个错误."
但编译器无法知道您将来不会添加instance Container [Int] Char,如果这样做,则不允许它破坏现有代码.
所以我们需要一些告诉编译器的方法
Container唯一确定第二个参数Container输入功能依赖项.