2010-03-17 107 views
3

我正在編寫haskell中的一個小lisp解釋器。在這個過程中,我定義了這個數據類型,以獲得更少的類型數字。爲什麼Hugs在我的數據類型聲明中抱怨`|`?

data Number = _Int Integer 
      | _Rational Rational 
      | _Float Double 
    deriving(Eq,Show) 

與擁抱編譯此失敗,出現以下錯誤:

ERROR "types.hs":16 - Syntax error in data type declaration (unexpected `|')

線16與在上面的代碼中的第一|線。

+0

什麼編譯您使用的? GHCi(v 6.10.4)抱怨下劃線,但是當我s/_/M /時,它編譯得很好。 – perimosocordiae 2010-03-17 23:10:36

+0

我正在使用hugs98 200609-4。這確實是導致問題的下劃線。 :) – keiter 2010-03-17 23:25:02

+8

正如一個側面說明,我會建議幾乎在任何情況下GHC超過擁抱。許多較老的文件都說Hugs對初學者更好,因爲它擁有REPL,但GHCi實際上比Hugs提供更好的REPL並非如此。 – Chuck 2010-03-17 23:30:54

回答

13

擁抱在這裏有點迂迴。實際的問題不是|,而是在構造函數名稱的開始處的下劃線 - 它們不允許以下劃線開頭。這不僅僅是一個約定,構造函數以大寫字母開始,而是Haskell語法的一部分。我最好猜測Hugs是什麼「思考」是因爲你的第一個構造函數沒有正確命名,所以當你提供一個替代構造函數後,Hugs說:「等等,我沒有看到一個有效的構造函數但是!發生了什麼事?「

GHC提供了更清晰的錯誤:

types.hs:1:14: Not a constructor: `_Int' 
相關問題