我写了一个像这样的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]
。当我运行它时,我得到一个类型错误。有什么想法吗?
答案 0 :(得分:1)
您的shift
函数被声明为返回Subst
,但它确实返回了一个列表。您可能打算将Subst
构造函数包装在列表中。
然后你的subst
函数声明为Subst
参数,但是你用一个列表调用它 - 基本上是相同的问题。
此外,您的vars
函数可能也包含类型错误,因为正如我在您对上一个问题的回答中指出的那样,您无法定义a -> [String]
类型的有意义函数。