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