假设有一个类型A
,它是类C
的实例。
如果我理解正确的话,要覆盖实例实现,通常的做法是引入包装器 newtype A' = A' A
,然后包装所有出现的 A
在A'
中。
但是如何确保您不会意外忘记包装某些 A
,并且所有 A
都使用新的实现?
我们能做点什么吗?
最佳答案
如果您的函数依赖于您自己的 C
实现(由 A'
提供),您只需在该函数的类型签名中表达它即可。所以不要有
fGeneric :: C a => a -> b
你只需使用
fSpecific :: A' -> b
这样你就知道你会得到哪种行为。
关于haskell - 安全实例覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19278246/