2012-11-10 76 views
0

我已經寫了一個Haskell功能,像這樣:類型錯誤在Haskell功能

shift :: Subst a -> Subst a 
shift (S s) = [(x, (subst s' d)) | (x,d) <- s] where 
     s' = [(x,d) | (x,d) <- s, null (vars d)] 

與數據類型,像這樣data Subst a = S [(String,a)]

我已經聲明substsubst :: Subst a -> a -> avarsvars :: a -> [String]。當我運行這個時,我得到一個類型錯誤。任何想法爲什麼?

+3

當你問這樣的問題**給我們錯誤信息**。錯誤消息試圖幫助程序員理解錯誤。即使他們對你沒有任何意義,他們也會幫助你幫助你。然後,一旦你得到了你的答案,看看錯誤信息,並試圖找出它是如何對應於你的問題的解釋。這將逐漸使您能夠使用類型錯誤消息來爲自己找出問題! – Ben

回答

1

您的shift函數聲明返回Subst,但它確實返回一個列表。您可能打算將Subst構造函數包裝在列表中。

然後你的subst函數聲明爲Subst參數,但你用一個列表調用它 - 基本上同樣的問題。

此外,您的vars函數也可能包含類型錯誤,因爲正如我在回答您的上一個問題時指出的那樣,您無法定義類型爲a -> [String]的有意義的函數。

+0

是的,你是對的,那就是我所錯過的。現在修復。謝謝! – Bobo