【问题标题】:Type Error In Haskell FunctionHaskell 函数中的类型错误
【发布时间】:2012-11-10 00:34:39
【问题描述】:

我写了一个类似这样的 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 -&gt; a -&gt; a,将vars 声明为vars :: a -&gt; [String]。当我运行它时,我得到一个类型错误。任何想法为什么?

【问题讨论】:

  • 当您提出此类问题时给我们错误信息。错误消息试图帮助程序员了解问题所在。即使他们对你没有任何意义,他们也会帮助你。然后,一旦您得到答案,请查看错误消息并尝试找出它与您的问题的解释相对应。这将逐渐使您能够使用类型错误消息来自己识别问题!

标签: haskell substitution unification


【解决方案1】:

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

然后您的 subst 函数被声明为采用 Subst 参数,但您使用列表调用它 - 基本上是同样的问题。

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

【讨论】:

  • 是的,你是对的,这就是我所缺少的。现在修好了。谢谢!
猜你喜欢
  • 2011-05-21
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多