[英]How do I fix ‘Eq a’ has kind ‘GHC.Prim.Constraint’ error in haskell?
[英]I get an error when i try deriving eq. How can i fix this?
我收到此錯誤:
TT' (type
矩陣T1')的第一個字段沒有產生(等式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)
任何想法?
在您的示例中,類型TT
的值包含類型T1
的值; 因此,要使兩個TT
類型的值相等,您還需要知道如何使兩個T1
類型的值相等。 但是您尚未為T1
定義一個Eq
實例! 向T1
添加一個deriving (Eq)
子句,該錯誤將消失。 這同樣適用於Ord
。
通常,如果您具有類型A
,其中包含類型B
的值,則要在A
上派生一個類型類,則需要在B
上派生相同的類型類。 如上所述,發生這種情況是因為為了在A
上實現該類型類的方法,您需要已經知道該類型類在B
行為,例如,除非您知道B
值如何相等,否則您不能將A
值相等(這就是您的以上示例)。 另一個示例:如果要以String
形式顯示A
類型A
值,則需要能夠將B
轉換為字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.