簡體   English   中英

嘗試推導eq時出現錯誤。 我怎樣才能解決這個問題?

[英]I get an error when i try deriving eq. How can i fix this?

我收到此錯誤:

  • TT' (type矩陣T1')的第一個字段沒有產生(等式T1)的實例可能的解決方法:使用獨立的“派生實例”聲明,因此您可以自己指定實例上下文
    • 為(Eq TT)導出實例時| 20 | }派生(Eq,Ord)

而且我不知道為什么以及如何解決此問題(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM