因此,继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.
答案 0 :(得分:6)
看起来你希望你的签名是这样的:
intsFrom :: Integer -> MyStream Integer
Integer
这是你的论点,MyStream Integer
是intsFrom
的结果。
答案 1 :(得分:4)
您应该只使用带有类型签名的行中的函数名称,而不是添加参数名称。而不是
intsFrom n :: MyStream Integer
使用
intsFrom :: MyStream Integer
您还必须确保声明的类型与该函数匹配。由于该函数采用Integer
参数,因此正确的签名将为:
intsFrom :: Integer -> MyStream Integer