Haskell cabal 对文件和模块名称感到困惑

Sim*_*age 2 haskell cabal

在我的 haskell 项目中,我有以下目录结构(缺少一些条目,但与此问题无关)

\n\n
- quanthas\n   - quanthas.cabal\n   - src/\n      - QuantHas/\n         - Settings.hs\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 Settings.hs 文件包含此模块头

\n\n
module QuantHas.Settings(module QuantHas.Settings) where\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 cabal 文件看起来像这样

\n\n
Name:               QuantHas\nVersion:            0.0\nDescription:\n    QuantHas project is an attempt to port QuantLib to Haskell keeping the functional flavor of Haskell.\nLicense:            BSD3\nLicense-file:       LICENSE\nBuild-Type:         Simple\nCabal-Version:      >=1.10\n\nLibrary\n  Build-Depends:    base >= 3 && < 5, array >= 0.2\n  Exposed-modules:  QuantHas.Time.Frequency\n                QuantHas.Time.TimeUnit\n                QuantHas.Time.Period\n                QuantHas.Time.Date\n                QuantHas.Time.DayCounter\n                QuantHas.Time.BusinessDayConvention\n                QuantHas.Time.Calendar\n                QuantHas.Time.Calendars.UnitedKingdom\n                QuantHas.Time.Schedule\n                QuantHas.Settings\n                QuantHas.Require\n  default-language: Haskell2010                 \n  hs-source-dirs:   src\n  --  ghc-options:      -Wall\n\ntest-suite QuantHas-tests\n  type: exitcode-stdio-1.0\n  hs-source-dirs: testsuite\n  main-is: Tests.hs\n  default-language: Haskell2010  \n
Run Code Online (Sandbox Code Playgroud)\n\n

当我执行时

\n\n
cabal install --enable-tests\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到这条消息

\n\n
src/Quanthas/Settings.hs:17:8: error:\n   File name does not match module name:\n   Saw: \xe2\x80\x98QuantHas.Settings\xe2\x80\x99\n   Expected: \xe2\x80\x98Quanthas.Settings\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

这似乎是错误的。然而,如果我们按照阴谋集团的预期去做呢?所以现在的 Settings.hs 模块头是

\n\n
module Quanthas.Settings(module Quanthas.Settings) where\n
Run Code Online (Sandbox Code Playgroud)\n\n

阴谋集团现在说

\n\n
src/QuantHas/Settings.hs:17:8: error:\n   File name does not match module name:\n   Saw: \xe2\x80\x98Quanthas.Settings\xe2\x80\x99\n   Expected: \xe2\x80\x98QuantHas.Settings\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

正是在这个点上,我放弃并转向SO。谁能帮助我了解发生了什么事?

\n\n

版本信息:\n 平台:运行 MacOS 10.12.3 的 Macbook Pro\n Haskell:8.0.1\n Cabal:1.24.0.0

\n\n

谢谢!

\n

Mic*_*man 6

问题在于不同模块中的导入语句之一存在拼写错误。由于您使用的是不区分大小写的文件系统 (OS X),GHC 能够找到模块内容,但在检查模块头时发现它与 import 语句不匹配并出错。