2012-01-09 132 views
1

因此,對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

啊,我很遺憾破碎的簽名。我已經更新了文章。 – shang 2012-01-09 14:30:45

回答

6

它看起來像你想你的簽名是這樣的:

intsFrom :: Integer -> MyStream Integer 

Integer這裏是你的論點,並MyStream IntegerintsFrom的結果。

4

你應該只與類型簽名行中使用函數名,不加參數名稱。因此,而不是

intsFrom n :: MyStream Integer 

使用

intsFrom :: MyStream Integer 

你還必須確保你聲明的類型匹配功能。由於該功能需要一個Integer參數,正確的簽名是:

intsFrom :: Integer -> MyStream Integer