Haskell函数中的类型错误

Haskell函数中的类型错误,haskell,substitution,unification,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)] shift::Subst a->Subst a shift(S)=[(x,(subst S'd))|(x,d)a->a和varsasvars::a->[String]。当我运行此

我编写了一个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)]
shift::Subst a->Subst a

shift(S)=[(x,(subst S'd))|(x,d)a->a
vars
as
vars::a->[String]
。当我运行此函数时,我得到一个类型错误。你知道为什么吗?

你的
shift
函数被声明为返回一个
Subst
,但它实际上返回一个列表。你可能想把
Subst
构造函数包装在列表中

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


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

是的,你是对的,这就是我缺少的。现在修复。谢谢!当你问这种问题时,给我们错误消息。错误消息试图帮助程序员理解错误。即使它们对你没有任何意义,它们也会帮助你。然后,一旦你得到答案,看看错误消息sage并尝试找出它与问题解释的对应关系。这将逐渐使您能够使用类型错误消息为自己识别问题!