无法定义 Show 实例

问题描述 投票:0回答:1

有件事我不明白。我定义了一个新类型

Q
并基于它定义了一个类型别名
QPolynomial
:

newtype Q = Q Rational
  deriving Eq

type QPolynomial = MP.T Q

instance Show QPolynomial where 
  show x = ...

然后编译会抛出一个错误:它声称已经有一个由

Show
QPolynomial
库中定义的
MP
Show a => Show (MP.T a)
实例。但是我的新类型
Q
没有
Show
实例。那么为什么要考虑
Show a => Show (MP.T a)
呢?

haskell
1个回答
0
投票

您最初定义的是

newtype
。但是,当您使用
type
时,正如您对
QPolynomial
所做的那样,您正在为现有类型创建同义词。
type
没有定义新类型。这就是
newtype
的用途。

所以,

QPolynomial
只是
MP.T Q
的另一个名字。当您写
instance Show QPolynomial
时,它与写
instance Show (MP.T Q)

是一样的
© www.soinside.com 2019 - 2024. All rights reserved.