如何使用cabal运行带自定义模块名的Haskell源文件
解决方案
有两种可以保留自定义模块名,同时正常用cabal运行单文件脚本的方式:
方式一:修改头部cabal配置块(推荐,一次修改永久生效)
将你头部的cabal注释块改成如下配置即可:
{- cabal: executable skifree build-depends: base , QuickCheck , checkers main-is: SkiFree.hs ghc-options: -main-is SkiFree -}
说明:
- 新增了显式的executable声明定义可执行程序
main-is后面填你的实际源文件名即可,如果你的文件名不是SkiFree.hs对应修改就行- 通过
ghc-options给GHC编译器传参,指定程序入口为SkiFree模块,不需要修改你原有的module SkiFree where声明 - 改完之后直接执行
cabal run 你的文件名.hs就能正常运行
方式二:运行时手动传参数(无需修改文件)
如果不想改动现有文件内容,执行命令时额外传入编译参数即可:
cabal run --ghc-options="-main-is SkiFree" 你的文件名.hs
补充说明
你之前直接在全局cabal配置里加main-is不生效,是因为cabal单文件脚本的默认隐式配置只会把Main模块作为程序入口,必须显式通过-main-is参数告知编译器自定义的入口模块,才能识别对应模块下的main函数。
内容的提问来源于stack exchange,提问作者user1984
相关产品推荐
相关产品推荐

