2016-03-18 58 views
-1

我已經在Haskell輸入「=」時出現分析錯誤。哈斯克爾

class Ord a => X a where 
    r :: (a, a) -> [a]   


instance (X a, X b) => X (a,b) 
    (*)r ((a,b), (c,d)) = r' ((a,b), (c,d)) b where 
     r' ((a, b), (c,d)) b' 
      | a == c && b == d = (a,b) 
      | b < d = (a,b) : (r' ((a, succ b), (c, d)) b') 
      | otherwise = (a,b) : (r' ((succ a, b'), (c,d)) b') 

定義的下面的類我有錯誤parse error on input =''的行(*)

我不知道如何修復它。請幫幫我。

+1

這是什麼意思:'(*)R((A,B),(C,d))'?這看起來不正確。 – Sibi

+0

猜測他打算標記錯誤消息所指的行。 – d8d0d65b3f7cf42

+0

@ d8d0d65b3f7cf42謝謝,我明白了。如果它沒有被指出,那會更好,因爲它很混亂! – Sibi

回答

3

一些錯誤,我可以看到:

  • 這是不正確的:(*)r ((a,b), (c,d))。也許你的意思是這樣的:r ((a,b), (c,d)) OP指示使用該術語的行。
  • 您的實例定義忽略了關鍵字where。它應該這樣定義: instance (X a, X b) => X (a,b) where
  • 函數r的類型表示它返回一個列表[a]。但在r'的定義的第一個子句中,您返回了一個不正確的元組。也許,你想這樣做:

    r' ((a, b), (c,d)) b' 
         | a == c && b == d = [(a,b)] 
    
  • 由於您使用的功能succ,變量的類型abEnum實例。

修復所有上述錯誤,給這個代碼typechecks:

instance (X a, Enum a, Enum b, X b) => X (a,b) where 
    r ((a,b), (c,d)) = r' ((a,b), (c,d)) b 
     where 
      r' ((a, b), (c,d)) b' 
       | a == c && b == d = [(a,b)] 
       | b < d = (a,b) : (r' ((a, succ b), (c, d)) b') 
       | otherwise = (a,b) : (r' ((succ a, b'), (c,d)) b') 
+1

是的是的,但我認爲給出提示比完整的解決方案更有用。該人只要求語法錯誤。 – d8d0d65b3f7cf42

2

應該

instance C T where 
    foo = bar where 
     bar = ... 

第一where缺失。