派生类型及其依赖项

Posted

技术标签:

【中文标题】派生类型及其依赖项【英文标题】:Deriving a type and its dependencies 【发布时间】:2011-01-06 11:19:04 【问题描述】:

我一直在为我的索引使用新类型包装器以避免错误,我有一些这样的代码:

-# LANGUAGE GeneralizedNewtypeDeriving #-

newtype PersonIdx = PersonIdx Int
  deriving (Enum, Eq, Integral, Num, Ord, Real, Show)

要派生Integral,还必须派生其所有依赖项(因此上面列出了类型类)。

有没有办法让它继承Integral 的所有依赖项?我会想象这样的事情:

newtype PersonIdx = PersonIdx Int
  deriving (Integral(..))

【问题讨论】:

【参考方案1】:

不,没有捷径。您必须显式地从所有依赖类型类派生,但可以通过在 ghci 中键入 :i Integral 轻松找到这些。

【讨论】:

我想知道这是否有原则上的原因,或者只是没有人实施有问题的快捷方式。 在 Haskell 的哲学中,一切都是明确的。语言中的“捷径”很少,这个例子也不例外。

以上是关于派生类型及其依赖项的主要内容,如果未能解决你的问题,请参考以下文章

pytest 不承认基类中的 PASSED 依赖项导致派生类中的 SKIPPED 测试

C++ 类型将基础对象转换为派生对象

漫谈QWidget及其派生类(三)

在 C++ 中,为啥只包含联合及其基类实例的派生类占用的内存比联合的大小还要多?

protectedpublicprivate

Part7 继承与派生 7.3基类与派生类类型转换