在Haskell函数中输入错误

时间:2012-11-10 00:34:40

标签: haskell substitution unification

我写了一个像这样的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)]

的数据类型

我已将subst声明为subst :: Subst a -> a -> a,将vars声明为vars :: a -> [String]。当我运行它时,我得到一个类型错误。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的shift函数被声明为返回Subst,但它确实返回了一个列表。您可能打算将Subst构造函数包装在列表中。

然后你的subst函数声明为Subst参数,但是你用一个列表调用它 - 基本上是相同的问题。

此外,您的vars函数可能也包含类型错误,因为正如我在您对上一个问题的回答中指出的那样,您无法定义a -> [String]类型的有意义函数。