2012-11-10 73 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