我收到此错误:
TT' (type
矩阵T1'的第一个字段产生)
可能的解决方法:
使用独立的“派生实例”声明,
因此您可以自己指定实例上下文
而且我不知道为什么以及如何解决此问题(Ord的错误相同)
这是我的代码:
import Data.Matrix
data T1 = T1 { x :: Char
, y :: Int
, z :: Int
}
instance Show T1 where
show t1 = [(x t1)]
data TT = TT { myMap :: Matrix T1
, flag :: Int
} deriving (Eq, Ord)
有什么主意吗?
答案 0 :(得分:4)
在您的示例中,类型TT
的值包含类型T1
的值;因此,要使两个TT
类型的值相等,您还需要知道如何使两个T1
类型的值相等。但是您尚未为Eq
定义一个T1
实例!向deriving (Eq)
添加T1
子句,错误将消失。 Ord
也是如此。
通常,如果您有一个类型A
,其中包含一个类型为B
的值,则要在A
上派生一个类型类,则需要在该类型上派生相同的类型类。 B
。如上所述,发生这种情况是因为为了在A
上实现该类型类的方法,您需要已经知道该类型类在B
上的行为,例如除非您知道A
的值是相等的,否则您不能将B
的值等同(上面的示例)。另一个示例:如果您想将A
类型的值显示为String
,则需要能够将B
转换为字符串。