2010-12-01 25 views
1

J'ai un problème et je ne peux pas savoir de quoi il s'agit. Je suis revenu à plusieurs reprises, mais je ne trouve pas la solution. Y a-t-il autre chose sur lequel cela peut dépendre?Haskell, erreur d'indentation possible que je ne peux pas me débarrasser de

Code:

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) 

Message d'erreur (ligne 94 correspond à la "décision correcte :: Triple -> Bool"):

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

EDIT: Je résolu le problème. Le problème était une erreur de syntaxe dans une fonction ci-dessus. J'ai eu otherwise m_ify m*2 au lieu de otherwise = m_ify m*2

+2

Pouvez-vous fournir un peu plus de code? Il semble que l'erreur s'est produite bien avant. – fuz

+0

FWIW, juste parce qu'il dit "indentation éventuellement incorrecte" ne signifie pas que c'est un problème d'indentation. C'est juste attirer l'attention sur le fait que certaines erreurs d'analyse peuvent être des erreurs d'indentation. Juste doubleecheck votre syntaxe dans les quelques lignes entourant la ligne dont il se plaint. – luqui

+0

Pour suivre le commentaire de luqui, vérifiez que vous avez fermé toutes les parenthèses avant la ligne 94. –

Répondre

0

Essayez:

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) 

Lire - http://www.haskell.org/onlinereport/syntax-iso.html à 9,3 Disposition

1

Worksforme, saute à droite dans les erreurs de type.

est la ligne 92, la ligne

type Triple = (Prime, Quot, Gen) 

, ou avez-vous déménagé que d'ailleurs? Parfois, les erreurs peuvent apparaître avec un numéro de ligne plus tard que là où elles se produisent réellement. Je vérifierais les parenthèses dépareillées au-dessus de la ligne 92 (probablement proche).

Et dans certains cas, un caractère invisible Unicode semble se faufiler dans mon code. Le retypage a parfois fonctionné.

+0

non, c'était plus haut –

1

Il se peut que vous deviez simplement ajouter des accolades autour du mod dans la dernière ligne. Cela ne causerait pas l'erreur d'indentation que vous déclarez, mais ce qui suit compile pour moi:

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) 

Le seul changement ici (à part les cinq premières lignes) est dans la dernière ligne.

+0

J'ai raté le backtick. Je suppose que GHC n'était pas allé aussi loin. Merci. –