递归数据构造函数中的类型签名无效

时间:2012-01-09 13:38:30

标签: haskell

因此,继streams上的示例代码后,无法加载到ghci中:

data MyStream a = MyStream a (MyStream a)

intsFrom n :: MyStream Integer
intsFrom n = MyStream n $ intsFrom $ n + 1

获取错误:

stream.hs:3:1:
    Invalid type signature: intsFrom n :: MyStream Integer
    Should be of form <variable> :: <type>
Failed, modules loaded: none.

有什么想法吗?谢谢!

更新:如果我只输入intsFrom :: MyStream Integer,我会收到错误:

stream.hs:4:1:
    The equation(s) for `intsFrom' have one argument,
    but its type `MyStream Integer' has none
Failed, modules loaded: none.

2 个答案:

答案 0 :(得分:6)

看起来你希望你的签名是这样的:

intsFrom :: Integer -> MyStream Integer

Integer这是你的论点,MyStream IntegerintsFrom的结果。

答案 1 :(得分:4)

您应该只使用带有类型签名的行中的函数名称,而不是添加参数名称。而不是

intsFrom n :: MyStream Integer

使用

intsFrom :: MyStream Integer

您还必须确保声明的类型与该函数匹配。由于该函数采用Integer参数,因此正确的签名将为:

intsFrom :: Integer -> MyStream Integer