then 和 else 解析 Haskell 列表理解中的错误

then and else parse error in Haskell List Comprehension

所以 Learn You A Haskell 中有一个示例,我想使用列表推导重写。基本上应该是一个简单的函数f:[a]->[Char]如下

let sayMe xs = [ if x <- [1..5] then show x else "Not a desired value" | x <- xs]

不幸的是,当我尝试定义函数时出现以下错误:

parse error in if statement: missing required then and else clauses

但是,我 dothenelse 子句,而据我所知,我的功能不是很远与我已验证有效的书中的另一个示例不同:

let sayMe xs = [if x<10 then "Bang!" else "Boom!"|x<-xs, odd x]

我知道还有其他方法可以做到这一点,但我想了解为什么这种特定方法没有按照我认为的方式工作。

一个if-then-else表达式包含三个部分:条件、True分支和False分支。这些部分中的每一个都必须是一个表达式x <- [1..5] 不是表达式;它是列表理解语法的一部分。但是,您可以用表达式来表达该概念。

[ if 1 <= x && x <= 5 then show x else "Not a desired value" | x <- xs ]

如果你感兴趣的东西不是连续的,可以使用elem功能:

[ if x `elem` [1,17,94,12] then show x else "Not a desired value" | x <- xs ]