2017-10-17 5 views
1

Wenn ich diesen Code ausführen:Parse-Fehler (möglicherweise falsche Einrückungen ...)

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

ich die folgende Fehlermeldung erhalten:

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

Ich bin nicht sicher, warum das so ist, wie ich nicht bin Verwenden Sie Klammern und ich verwende 4 Leerzeichen als meine Tabs. Das Hinzufügen von Klammern scheint nicht zu helfen. Was könnte das Problem sein?

Dank

+7

Wo ist dein 'else'? – 4castle

+1

In Haskell muss eine "if" -Anweisung einen Wert über ** beide ** Zweige "zurückgeben" - ohne diese Eigenschaft ist es im funktionalen Sinn nicht wirklich sinnvoll. Der 'if ... then ... else ...' -Ausdruck ist das, was Sie brauchen, und das erfordert 'else'. – hnefatl

Antwort

5

Ihre if braucht ein else (was tun Sie den Wert sein wollen, wenn x nicht 1 ist?).

Außerdem wird do Notation verwendet, wenn mit Monaden gearbeitet wird und in dieser Funktion keinen Sinn ergibt.

+0

Ah vielen Dank, mir war nicht bewusst, dass alle Zweige eine else-Verzweigung benötigen und dass ich nicht immer = verwenden muss, wenn ich eine Funktion definiere. Vielen Dank! –

+0

@skeskemith Denken Sie nicht an sie als "Zweige". Haskells "wenn ein dann b else c" ist der ternäre Operator (denke 'a? B: c'), nicht ein Kontrollflussmechanismus (außer im Fall der Verwendung von Monaden). – AJFarmar

Verwandte Themen