2010-12-01 48 views
1

我有一個問題,無法找出它是什麼。我一遍又一遍地重新壓縮,但找不到解決方案。還有別的東西可以依賴嗎?Haskell,可能的縮排錯誤,我無法擺脫

代碼:

type Triple = (Prime, Quot, Gen) 

correctness :: Triple -> Bool 
correctness (p,q,g) = prime && pLength && qLength && divisor && orderq 
      where prime = probablyPrime n 5 
       qLength = q < 2^1024 
       pLength = p < 2^160 
       divisor = (p-1 `mod` q) == 0 
       orderq = (g^q mod p == 1) && (g > 1) 

錯誤消息(線94個對應於 「正確性::三 - > BOOL」):

crypt.hs:94:0: parse error (possibly incorrect indentation) 

編輯:我解決了這個問題。問題是上述函數中的語法錯誤。我有otherwise m_ify m*2,而不是otherwise = m_ify m*2

+2

你能提供更多的代碼嗎?這似乎是很久以前發生的錯事。 – fuz 2010-12-01 12:17:36

+0

FWIW,僅僅因爲它表示「可能不正確的縮進」並不意味着它是縮進問題。這只是提請注意一些解析錯誤可能是縮進錯誤的事實。只需在圍繞它所抱怨的行的幾行中檢查你的語法。 – luqui 2010-12-01 12:31:17

+0

要跟蹤luqui的評論,請檢查您是否在94行之前關閉所有parens。 – 2010-12-01 12:53:10

回答

0

嘗試:

type Triple = (Prime, Quot, Gen) 

correctness :: Triple -> Bool 
correctness (p,q,g) = prime && pLength && qLength && divisor && orderq 
      where 
       prime = probablyPrime n 5 
       qLength = q < 2^1024 
       pLength = p < 2^160 
       divisor = (p-1 `mod` q) == 0 
       orderq = (g^q mod p == 1) && (g > 1) 

讀 - http://www.haskell.org/onlinereport/syntax-iso.html - 9.3佈局

1

WORKSFORME,跳躍右轉入類型錯誤。

是線92

type Triple = (Prime, Quot, Gen) 

線,還是你移動,從別的地方?有時候錯誤可能比實際發生的地方晚出現。我會檢查92行以上的不匹配括號(可能在附近)。

在某些情況下,一個看不見的unicode字符似乎潛入我的代碼。重新塑造偶爾有效。

1

您可能只需要在最後一行中添加反斜槓mod。這會不會導致你報道的縮進錯誤,但下面編譯對我來說:

n = undefined 
probablyPrime = undefined 
type Prime = Int 
type Quot = Int 
type Gen = Int 

type Triple = (Prime, Quot, Gen) 

correctness :: Triple -> Bool 
correctness (p,q,g) = prime && pLength && qLength && divisor && orderq 
      where prime = probablyPrime n 5 
       qLength = q < 2^1024 
       pLength = p < 2^160 
       divisor = (p-1 `mod` q) == 0 
       orderq = (g^q `mod` p == 1) && (g > 1) 

這個唯一的變化(除了前五行)是在最後一行。