1
考虑以下数据类型:数据构造 - 同种
data JoinList m a = Empty
| Single m a
| Append m (JoinList m a) (JoinList m a)
deriving (Eq, Show)
使用ghci
,我所做的:
*JoinList> :t Single 5 3
Single 5 3 :: (Num m, Num a) => JoinList m a
为什么在这里需要两个Num
类型?由于这两种类型都Num
,那么我们为什么不能有:
Single 5 3 :: (Num m) => JoinList m m
'Num'是一个类,不是数据类型。 'Int'是一个实例,'Float'也是一个实例。两个实例不一定是相同的。 – 2014-11-01 01:05:31
简短的回答是:由于同样的原因,在您的ADT中有两个类型变量有两个Num约束。 – 2014-11-01 01:15:18