2017-10-17 47 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

在Haskell中,「if」語句必須沿着**兩個**分支「返回」一個值 - 沒有這個屬性,它在功能意義上並沒有真正意義。 「if ... then ... else ...'表達式就是你需要的,它確實需要'else'。 – hnefatl

回答

5

if需要一個else(你想要的值是當x不是1什麼呢?)。

此外do符號用於使用monads時,在此函數中沒有意義。

+0

啊,非常感謝,我不知道所有分支都需要一個else分支,並且在定義一個函數時我不需要總是使用= do。謝謝! –

+0

@skacesmith不要把它們看作「分支」。 Haskell的'如果一個then b else c'是三元運算符(認爲'a?b:c'),而不是控制流機制(除了使用monads的情況外)。 – AJFarmar