Haskell代码解析错误:<-语法问题(已在do块中仍报错)
解决Haskell do块中“parse error on input ‘<-’”的问题
你的代码错误出在第7行的let choice <- getLine——在Haskell的do块中,绑定IO操作的结果不需要加let关键字,let是用来绑定纯值(非IO计算的结果)的,而<-是专门用于从IO monad中提取结果的语法,两者不能混用。
修正后的代码如下:
chooseDifficulty :: IO () chooseDifficulty = do putStrLn "Choose your difficulty:" putStrLn " 1: easy" putStrLn " 2: medium" putStrLn " 3: difficult" choice <- getLine putStrLn ("Choice was " ++ choice) main :: IO () main = chooseDifficulty
另外需要注意,原代码中putStrLn "Choice was " ++ choice的写法也有问题:putStrLn的参数需要是单个字符串,这行代码会被编译器解析成(putStrLn "Choice was ") ++ choice,而putStrLn返回的是IO ()类型,无法和字符串做拼接,所以必须把拼接后的整体用括号包裹,确保putStrLn接收的是完整的字符串参数。
编译器给出的“Perhaps this statement should be within a 'do' block?”提示,是因为let和<-的混用打乱了语法结构,导致编译器误判该行不在do块范围内,核心问题还是语法规则的误用。
内容的提问来源于stack exchange,提问作者Kemel Zaidan
相关产品推荐
相关产品推荐

