【发布时间】:2017-01-13 20:58:43
【问题描述】:
问:如何调整 cabal(stack?) 设置,让 app/LogAnalysis.hs 最终被视为主日志?
这是我自己遇到这个错误的原因:
- 使用
stack new xyz创建了新项目 - 将
app/Main.hs重命名为app/LogAnalysis.hs - 调整了
xyz.cabal文件中的main-is选项
问题是我以某种方式错误地输入了该数据,或者 cabal 忽略了该新值。这是我得到的错误:
Preprocessing executable 'WeekTwo-exe' for WeekTwo-0.1.0.0...
<no location info>: error:
output was redirected with -o, but no output will be generated
because there is no Main module.
这是xyz.cabal中的相关条目
executable WeekTwo-exe
hs-source-dirs: app
main-is: LogAnalysis.hs
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: base
, WeekTwo
default-language: Haskell2010
有问题的模块是:
module LogAnalysis where
import Log
main :: IO ()
main = print (parseMessage "I 29 la la")
版本: 堆栈 - 版本 1.3.2 GHC - 7.15 阴谋集团 - 1.24.0.0
如果有兴趣的话,我在 Haskel 课程 CIS 194 的第 2 周做。
【问题讨论】:
-
GHC 要求需要主
main :: IO ()的模块命名为Main。模块通常必须具有与模块名称相对应的文件路径。您必须再次将LogAnalysis.hs重命名为Main.hs。 -
main-is不应该覆盖这个吗? -
我认为
main-is仅在有多个模块时用于指向正确的Main模块。 -
当我完成您的创建/重命名/调整时,该项目为我工作。然后
stack exec xyz-exe为我工作,打印“somefunc”。当您收到错误时,您正在运行什么命令? -
堆栈构建 - 查看接受的答案。我误解了
main-is的含义,并认为它会使ghc 查找不同的模块,而实际上它只是告诉ghc 在不同的文件中查找模块Main然后Main.hs。跨度>
标签: haskell cabal haskell-stack