我正在嘗試編寫一個remove
函數,以便用戶可以輸入remove 'd' ["abc", "dc", "ad"]
並獲得輸出["abc", "c", "a"]
。如何修復「發生檢查:無法構造無限類型」錯誤?
我的代碼是:
remove :: Eq a => a -> [[a]] -> [[a]]
remove a (x:xs) = filter (not.a) (x:xs)
,但我得到了以下錯誤消息:
Occurs check: cannot construct the infinite type: a = [a] -> Bool
When generalising the type(s) for `remove'
什麼是錯誤訊息,我怎麼可以改變第二行,以便它的工作原理?
謝謝,你解釋得很好。 – user1351008
他實際上是用'a'編寫的'not',它不會給出'Bool'類型,而是'[a] - > Bool'(一個列表,因爲它被用作列表列表上的過濾器謂詞)如錯誤消息所述。 –