Haskell函数中的类型错误
我编写了一个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]。当我运行此
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
asvars::a->[String]
。当我运行此函数时,我得到一个类型错误。你知道为什么吗?你的shift
函数被声明为返回一个Subst
,但它实际上返回一个列表。你可能想把Subst
构造函数包装在列表中
然后你的subst
函数被声明为接受一个subst
参数,但是你用一个列表调用它-基本上是相同的问题
另外,您的
vars
函数可能也包含类型错误,因为正如我在对上一个问题的回答中所指出的,您无法定义a->[String]类型的有意义函数
是的,你是对的,这就是我缺少的。现在修复。谢谢!当你问这种问题时,给我们错误消息。错误消息试图帮助程序员理解错误。即使它们对你没有任何意义,它们也会帮助你。然后,一旦你得到答案,看看错误消息sage并尝试找出它与问题解释的对应关系。这将逐渐使您能够使用类型错误消息为自己识别问题!