【问题标题】:Haskell Stack + Cabal ignore 'main-is' option and fail to build app [duplicate]Haskell Stack + Cabal忽略'main-is'选项并且无法构建应用程序[重复]
【发布时间】: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


【解决方案1】:

您是否可以将module Main where 更改为module LogAnalysis where?如果你这样做了,你会得到这个错误。

Main-is 只是说检查此文件中的Main 模块,但它仍然必须是Main 模块,而不是LogAnalysis 模块。这清楚地表明应该运行该文件中的 main 函数,而不是运行某些其他模块中可能碰巧存在的 main 函数。

【讨论】:

  • don't need to rename the module。你只需要告诉 GHC 你的主模块的名字。您可以在您的 cabal 文件中执行此操作:ghc-options: -main-is LogAnalysis
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多