0

我写了一个 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了 assubst :: Subst a -> a -> avarsas vars :: a -> [String]。当我运行它时,我得到一个类型错误。任何想法为什么?

4

1 回答 1

1

您的shift函数被声明为返回 a Subst,但它实际上返回一个列表。您可能打算将Subst构造函数包装在列表周围。

然后你的subst函数被声明接受一个Subst参数,但是你用一个列表来调用它——基本上是同样的问题。

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

于 2012-11-10T00:47:26.220 回答