2017-10-17 9 views
1

私はこのコードを実行すると:解析エラー(おそらく間違ってインデント...)

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

を私は次のエラーを取得する:

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

私はないです、これは、なぜわかりません角かっこを使用し、私は4つのスペースをタブとして使用しています。角括弧を追加することは役に立たないようです。何が問題なの?

おかげ

+7

あなたの 'else'はどこですか? – 4castle

+1

ハスケルでは、 "if"ステートメントは両方の**ブランチに沿って値を "返す"必要があります - このプロパティがなければ、実際には機能上意味をなさない。 'if ... then ... else ...'式は必要なもので、 'else'が必要です。 – hnefatl

答えて

5

あなたifは(あなたがxが1でない場合に値があることを何をしたいですか?)elseを必要とします。

さらにdoは、モナドを扱うときに使用され、この関数では意味をなさない。

+0

ああ、ありがとう、私はすべてのブランチがelseブランチを必要としていることを知らなかったし、私は関数を定義するときに常に= doを使う必要はないということを知っていた。ありがとう! –

+0

@skacesmith「枝」とは思わないでください。ハスケルの 'もしa b then else c'は、制御フローの仕組みではなく(モナドを使う場合を除いて)、三項演算子である(a?b:cと考える)。 – AJFarmar

関連する問題