的一個實例的「模糊類型變量」錯誤我正在學習Haskell並試圖使我的數據(與Maybe類似)爲Eq
的實例,如下所示。Haskell - 使我的數據成爲Eq
module Main where
data MyMaybe a = MyNothing | MyJust a
instance (Eq a) => Eq (MyMaybe a) where
MyNothing == MyNothing = True
MyJust x == MyJust y = x == y
_ == _ = False
main :: IO()
main = do
let b0 = MyJust 42 == MyJust 42 -- OK
print b0 -- True
let b1 = MyNothing == MyNothing -- Build error!
print b1
但是編譯器在行let b1 = MyNothing == MyNothing
中返回錯誤,如下所示。
?由於使用'==' 而產生的不明確的類型變量'a0'防止約束'(Eq a0)'被解決。 可能的修正:使用類型註釋來指定'a0'應該是什麼。 這些潛在的情況下存在: 例如公式排序 - 在定義「GHC.Classes」
...
我怎樣才能解決呢?
...我搜索了現有的問題和答案。下面的一個看起來很接近我,但我認爲我的代碼已經解決了答案提出的問題。
how to instance Eq without deriving
它具體與MyMaybe有關,你會得到與標準Maybe相同的結果。 [演示](https://ideone.com/VOeZak)。 –