Haskell报错parse error on input `=',无法打印原列表和排序后列表
Haskell代码问题修复
报错直接原因
你遇到的parse error on input '='是因为类型标注语法错误:Haskell不支持将变量类型声明和赋值逻辑写在同一行无分隔,正确写法是类型标注单独占一行,再写赋值逻辑。
其他存在的问题
- 无意义的
listBuilder函数,Haskell无法通过这种方式初始化全局变量 - 输入拿到的是字符串类型,没有转为整数就存入数字列表
- 完全错误的列表构建语法,
num1 :: numList既不符合类型标注规则,也不能将元素加入列表 - do块内的纯值绑定没有加
let关键字,违反IO块的语法规则 - 列表是
[Integer]类型,不能直接和字符串拼接,需要先转成字符串
修复后可运行的完整代码
import Data.List main :: IO () main = do putStrLn "Enter 5 Numbers" num1 <- read <$> getLine num2 <- read <$> getLine num3 <- read <$> getLine num4 <- read <$> getLine num5 <- read <$> getLine let numList :: [Integer] numList = [num1, num2, num3, num4, num5] sortedList :: [Integer] sortedList = sort numList print ("Old List: " ++ show numList) print ("Sorted List: " ++ show sortedList)
核心修改说明
- 用
read <$> getLine直接把输入的字符串转为整数类型 - 统一在do块内用
let绑定纯计算的变量,类型标注单独占一行 - 用列表字面量
[num1..num5]构建输入的数字列表 - 用
show函数把数字列表转为字符串后,再和提示文本拼接输出
内容的提问来源于stack exchange,提问作者AEric.
相关产品推荐
相关产品推荐

