2012-06-21 2 views
2

J'ai triché avec l'indentation sur ceci pendant un moment maintenant, mais cela me semble correct. Quelqu'un peut-il voir où je vais mal?"Indentation peut-être incorrecte" dans la déclaration de cas Haskell

deposit :: NodeType -> NodeType -> Amount -> Node 
deposit (Income income) (Account bal grow) amount = 
    Account (bal + transfer) grow where transfer = case amount of 
    AbsoluteAmount amount -> min income amount -- This is line 34 
    RelativeAmount percent -> (min 1.0 percent) * income 

Le message d'erreur que je reçois est:

Prelude> :load BudgetFlow.hs 
[1 of 1] Compiling Main    (BudgetFlow.hs, interpreted) 

BudgetFlow.hs:34:5: parse error (possibly incorrect indentation) 
Failed, modules loaded: none. 

Ligne 34 (la ligne avec l'erreur d'analyse syntaxique) est la ligne qui commence AbsoluteAmount (je l'ai marqué avec un commentaire ci-dessus). J'ai essayé de mettre l'instruction case sur sa propre ligne et de mettre les deux cas entièrement en retrait à droite du mot-clé of, mais le message d'erreur est toujours le même. Merci beaucoup pour toute aide!

Répondre

4

Mettez la clause where sur sa propre ligne.

deposit :: NodeType -> NodeType -> Amount -> Node 
deposit (Income income) (Account bal grow) amount = Account (bal + transfer) grow 
    where 
     transfer = case amount of 
      AbsoluteAmount amount -> min income amount -- This is line 34 
      RelativeAmount percent -> (min 1.0 percent) * income 
+0

C'est fait. Merci beaucoup! –

+2

Pour être précis: le bloc introduit par 'case' doit être plus profondément indenté que le bloc introduit par' where'. Toute modification qui satisfait ce critère fonctionnera - le 'where' n'est pas demandé pour être seul sur une ligne. –

Questions connexes