我目前正在创建一个程序,它从用户那里获取一个数字,然后根据输入决定发生什么:
function :: Int -> IO ()
function n = do
putStr "Input: "
x <- getLine
let y = (read x :: Int)
if y == n
then
print "Something"
else if y < n
then
print "Something"
function n
else if y > n
then
print "Something"
function n
然而,上面的代码返回了一个'parse error (possibly incorrect indentation or mismatched brackets)
'错误。这个错误似乎是在我把任何类型的条件语句(if/guard/case)放在let guess = (read x :: Int)
行之后时发生的,我不知道为什么。如果有任何建议,我将不胜感激,提前感谢。
1条答案
按热度按时间8yparm6h1#
问题是
then
块包含多行。对于这些,您可以使用额外的do
来执行去糖化。另一个问题是每个if … then … else …
都需要一个else …
子句,因为这些是表达式,没有语句:更简单的是:
通常对于两个项目,它保持
x < y
、x > y
或x == y
(尽管对于例如Double
s,它不保持)。因此,您可以省略最后一个检查:我们也可以使用多路,如果:
或具有
case … of …
: