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

Haskell Stack脚本开发报错:文件名与模块名不匹配问题求助

解决Haskell Stack脚本的“File name does not match module name”错误

嘿,作为Haskell新手刚接触Stack脚本和Turtle库,碰到这个错误太正常啦!我来给你拆解一下问题和解决办法:

错误原因

Haskell有个默认规则:如果代码里没有显式声明模块名,编译器会自动把文件名(首字母大写)当作模块名。你的脚本文件叫turtle.hs,编译器就会默认它对应的模块是Turtle,但你的main函数其实属于Haskell默认的Main模块(所有可执行程序的入口模块),这就导致了“文件名和模块名不匹配”的冲突。

两种解决办法

方法1:显式声明Main模块(推荐,保留原文件名)

只需要在代码里加上module Main where,明确告诉编译器这个文件的模块是Main,不管文件名是什么都能正常运行。修改后的turtle.hs内容如下:

#!/usr/bin/env stack
-- stack --resolver lts-11.2 script
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Turtle
main = echo "Hello!"

方法2:修改文件名匹配默认模块

如果你不想改代码,也可以把turtle.hs改名为Main.hs,这样文件名(Main.hs)和默认模块名Main一致,编译器就不会报错了。

验证修改

改完之后,重新运行./turtle.hs(或者./Main.hs,如果用了方法2),就能正常输出Hello!啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:49:06