我開始與Haskell一起工作,但是我試圖做的這種相等性檢查沒有解決。Haskell - 「在應用程序中鍵入錯誤」:「統一會給無限類型」
我有一個函數,countLetter a [b] c
,其中a
是一個char,b
是字符的列表,c
是一個int。 (該類型聲明通過精細過去了。)但是我碰上這種表達的問題:
if a == head(b)
給我下面的消息:
Type error in application
*** Expression : a == head b
*** Term : a
*** Type : [a]
*** Does not match : a
*** Because : unification would give infinite type
我全部的代碼,如果需要這種耐心,是這樣的:
countLetter :: char -> [char] -> int
countLetter a [b] c = if null b
then []
else
if a == head(b)
then countLetter a tail(b) c+1
else
countLetter head(b) tail(b) c
任何幫助或建議將不勝感激。謝謝。
非常感謝! 我不知道大寫字母,所以這是一個很大的幫助。 正如你所說,我得到了'null b'的錯誤。我曾經以爲b會是一個列表,但我似乎錯了。你能告訴我如何正確表示b作爲列表嗎? 如果我不能使用[],我還不確定如何結束列表。我過去的經歷與Core Haskell有關,雖然我一直在閱讀,但我仍然不知道任何其他方式來結束列表。 –
@SamOfloinn我擴展了我的答案。希望能夠清除一切。 – sepp2k
啊,這很有趣。再次感謝你! 我會嘗試解決我自己得到的下一個問題。祝你晚安! –