Haskell if then else with "two statements"
我该怎么做:
我想在一种情况下使用"两条语句",但我不断收到编译错误
我尝试使用分号但没有成功
then 只能取一个值....但是你很幸运,因为 do 将多个 IO() 值合并为一个....
请记住,在 Haskell 中,您还需要一个 else(并且 return () 创建了一个不做任何事情的普通 IO())。
- 如果您不喜欢 else return (),您可以使用 Control.Monad 中的 when 而不是 if .. then ... else ...。
你的例子在 Haskell 中没有意义。每个表达式都需要有一个值,这就是为什么你总是需要一个 else,即使它只是 return ().
因为它需要是一个单一的表达式,你不能只做
因为这是两个 IO () 类型的表达式,这意味着它是一个有一些外部影响的计算,并且没有结果。您有两个需要按顺序运行的计算,可以使用 >> 组合器
来完成
还有一种使用 do 块的替代语法。
这里要注意的重要一点是,这将编译为与上面示例相同的 >> 代码。 do 块可以被认为是语法糖(还有更多内容,但为简单起见,您可以这样想。)
把这一切放在一起就剩下了
或使用 do 块
因为这种模式很常见,所以有一个 when 组合子(在 Control.Monad 中),它正是这样做的
或者只是