haskell - 安全实例覆盖

标签 haskell overriding newtype

假设有一个类型A,它是类C的实例。

如果我理解正确的话,要覆盖实例实现,通常的做法是引入包装器 newtype A' = A' A,然后包装所有出现的 AA'中。

但是如何确保您不会意外忘记包装某些 A,并且所有 A 都使用新的实现?

我们能做点什么吗?

最佳答案

如果您的函数依赖于您自己的 C 实现(由 A' 提供),您只需在该函数的类型签名中表达它即可。所以不要有

fGeneric :: C a => a -> b

你只需使用

fSpecific :: A' -> b

这样你就知道你会得到哪种行为。

关于haskell - 安全实例覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19278246/

相关文章:

使用变形的列表过滤器

haskell - 整数类型之间转换的常见习惯用法是什么?

list - 如何在 Haskell 中组合过滤器和映射

列表的 Haskell 映射函数

overriding - 无法覆盖 prestashop 模块中的类文件

scala - 为什么值类仅限于 AnyVal?

java - Jackson注释来覆盖父类中的注释

c++ - 继承QTime,自定义时间格式

haskell - 为什么是 WrappedMonad 和 WrappedArrow?

haskell - 为清楚起见制作新类型/数据是不好的形式吗?