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

Haskell代码运行报Parse error错误,如何修复使其可在CMD执行?

报错原因

Haskell 模块的顶层仅允许出现模块声明、import 导入语句、顶层变量/函数绑定声明,你代码第7行的列表推导是直接的执行表达式,不属于合法的顶层语法结构,因此触发解析错误。

修复方案

有两种常用修改方式,可按需选择:

  • 方式1:给表达式添加顶层绑定,加载模块后手动调用查看结果
    修改后完整代码如下:
module Examples where 
import System.Random
import Data.List
cars = ["Ferrari", "Audi", "Honda","McLaren","Merc"]
cmp (x1,y1) (x2,y2) = compare y1 y2
-- 给列表推导添加顶层变量绑定
shuffledCars = [car | (car, n) <- sortBy cmp(zip cars (randoms (mkStdGen 123456) :: [Int]))]

修改完成后在 CMD 中用 GHCi 加载模块,输入 shuffledCars 即可输出打乱后的车辆列表。

  • 方式2:封装为main函数,可直接编译运行或加载后自动执行
    修改后完整代码如下:
module Examples where 
import System.Random
import Data.List
cars = ["Ferrari", "Audi", "Honda","McLaren","Merc"]
cmp (x1,y1) (x2,y2) = compare y1 y2
main :: IO ()
main = print [car | (car, n) <- sortBy cmp(zip cars (randoms (mkStdGen 123456) :: [Int]))]

修改完成后可直接用GHC编译为可执行文件在CMD运行,或在GHCi加载模块后输入 main 即可直接输出结果。

可选优化

你定义的cmp函数可以直接替换为Data.Ord里的comparing snd,不需要手动编写比较逻辑,简化后对应代码行可以写为:
shuffledCars = [car | (car, n) <- sortBy (comparing snd) (zip cars (randoms (mkStdGen 123456) :: [Int]))]

内容的提问来源于stack exchange,提问作者unknown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:06:03