2017-10-17 4 views
1

Quand je lance ce code:Erreur d'analyse (Peut-être Indentation incorrect ...)

test1 :: Int -> String 
test1 x = do 
    if x == 1 
     then "Hello" 

Je reçois l'erreur suivante:

test-if.hs:4:21: error: 
    parse error (possibly incorrect indentation or mismatched brackets) 

Je ne sais pas pourquoi est-ce que je ne suis pas en utilisant des crochets et j'utilise 4 espaces comme mes onglets. Ajouter des parenthèses ne semble pas aider. Quel pourrait être le problème?

Merci

+7

Où est votre 'else'? – 4castle

+1

Dans Haskell, une instruction "if" doit "renvoyer" une valeur le long des ** deux ** branches - sans cette propriété, cela n'a pas vraiment de sens au sens fonctionnel. L'expression 'if ... then ... else ...' est ce dont vous avez besoin, et cela nécessite 'else'. – hnefatl

Répondre

5

Votre if a besoin d'un else (que voulez-vous que la valeur soit quand x est pas 1?).

De plus, la notation do est utilisée lorsque l'on travaille avec des monades et n'a pas de sens dans cette fonction.

+0

Ah merci beaucoup, je n'étais pas au courant que toutes les branches ont besoin d'une autre branche et que je n'ai pas besoin de toujours utiliser = faire lors de la définition d'une fonction. Merci! –

+0

@skacesmith Ne les considère pas comme des 'branches'. Le 'si a puis b autre c' de Haskell est l'opérateur ternaire (pensez' a? B: c'), pas un mécanisme de flux de contrôle (sauf dans le cas de l'utilisation de monades). – AJFarmar