【发布时间】:2019-09-12 05:21:51
【问题描述】:
我发现我不知道如何处理 Haskell 中 do-blocks 中嵌套的 if-else-then。
我已经知道我可以使用case,但这需要我的所有条件(a、b 和c)返回相同的类型(Bool,所以只有两个案例,但我需要三个不同的案例),因此不是一般的(如果我错了,请纠正我)。我也尝试过考虑在这里使用守卫,但我不知道如何在do 语句中进行这项工作,尤其是如果-- something 表达式的类型是IO ()。
假设我在do 中有以下代码:
if a then
-- something
else
if b then
-- something
else
if c then
-- something
else
-- something
我如何创建等效逻辑但没有所有缩进?
【问题讨论】:
-
您所写的内容已经要求您所有的
-- something占位符返回相同的类型,因此您对case的反对并不真正适用。 -
(1) “这将要求我所有的案例都返回相同的类型,因此不是一般的(如果我错了,请纠正我)”——你还必须返回相同的类型if 表达式的两个分支。除了语法之外,
Bool上的 if 表达式和 case 表达式之间基本上没有区别。 (2)“我也尝试过考虑在这里使用守卫,但我不知道如何在 do 语句中进行这项工作”——你不能在 do-block 中使用守卫; if 表达式确实是正确的选择。 -
对不起,我在最初的问题中说错了,这不是
-- something占位符返回我试图避免的相同类型,而是条件(a、b和 @ 987654339@)。我已经编辑了我的答案。
标签: haskell