我試圖將列表的頭部(r
)添加到列表sack
,但是我不斷收到此錯誤消息。組合列表和單個項目時出現警戒狀態時出錯
ERROR "Knapsack.hs":35 - Type error in guarded expression
*** Term : findItems rt (r : sack) (getTotalWeight sack r)
*** Type : [Item]
*** Does not match : [[Item]]
代碼如下所示。
findItems :: [Item] -> [Item] -> Float -> [Item]
findItems (r:rt) sack total
| total > 20 = [sack]
| canContinue = findItems rt (r : sack) (getTotalWeight sack r)
| otherwise = [sack]
where canContinue = (getTotalWeight sack r) < 20
非常感謝你,我是Haskell的新手,早期犯了這個錯誤,並不認爲這是問題所在。 –
如果您嘗試使用GHC進行編譯,您會得到'無法與'[sack]'的實際類型\ [[Item]'匹配預期類型\ Item'')。您獲得哪個錯誤消息取決於類型檢查算法的實現。擁抱與GHC不同。 –
自動類型推斷的一般屬性是,當發現類型錯誤時,它通常並不明顯是錯誤所在。所以不同的編譯器和解釋器會指向代碼的不同部分。 – MathematicalOrchid