You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:50:21