同時通過真實世界哈斯克爾工作,我嘗試使用下面的代碼的解決方案來完成迴文鍛鍊:爲什麼這種形式可以接受,但另一種形式會引發類型錯誤?
palin :: [a] -> [a]
palin list = list ++ rev list
where rev list
| null list = []
| otherwise = rev (tail list) ++ (head list)
其中提出了一個「無法構造無限類型的錯誤。然而,簡單地更換周圍的括號頭列表用方括號,它工作正常,如下面的例子證明:
palin :: [a] -> [a]
palin list = list ++ rev list
where rev list
| null list = []
| otherwise = rev (tail list) ++ [head list]
我真的不明白,爲什麼它很重要,我也不明白什麼是「無法構造無限類型= [ a]「錯誤我答。有人能解釋這一點嗎?
表達式'(something)** ** never **與形式'[something]'的相應表達式具有相同的類型,您只需用方括號替換括號即可。那*總是很重要! – Ben 2013-12-17 00:29:02