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
相关产品推荐
相关产品推荐

