无法通过 Haskell 教程

Can't go through a Haskell tutorial

我是 Haskell 的新手 – 我只知道它的语法,但了解的不多,所以我认为获得更多信息的最佳方法是学习 Haskell 的一些教程维基。

我找到了这个: https://wiki.haskell.org/How_to_write_a_Haskell_program

不幸的是,当我到达项目 (2.9) 时,我的结果与网站上显示的有所不同。当我输入 cabal install --enable-tests 时,我得到:

Resolving dependencies...
Configuring haq-0.1.0.0...
Building haq-0.1.0.0...
Preprocessing executable 'haq' for haq-0.1.0.0...
Linking dist/dist-sandbox-2a06ecba/build/haq/haq ...
Preprocessing test suite 'tests' for haq-0.1.0.0...
<command line>: cannot satisfy -package-id haq-0.1.0.0-inplace
    (use -v for more information)
Failed to install haq-0.1.0.0
cabal: Error: some packages failed to install:
haq-0.1.0.0 failed during the building phase. The exception was:
ExitFailure 1

真的有两个问题:

  1. 如何解决这个问题并编译通过?

  2. 附加到我的包版本的这个 -inplace 来自哪里?我尝试将它添加到 cabal 文件中,但这也没有帮助。

如果需要,我很乐意 post 更多详细信息。我的代码与教程中的说明几乎相同。

编辑

这是我的 .cabal 文件:

name:                haq
version:             0.1.0.0
description:         Super cool mega lambdas
license:             GPL
author:              Alojzy Leszcz
build-type:          Simple
cabal-version:       >=1.10

executable haq
  main-is:             Haq.hs  
  build-depends:       base >=4.8 && <4.9  
  default-language:    Haskell2010
  
test-suite tests
  ghc-options:         -Wall
  default-extensions:  OverloadedStrings
  type:                exitcode-stdio-1.0
  main-is:             HSpecTests.hs
  build-depends:       base,
                       haq,
                       hspec >= 1.8
  default-language:    Haskell2010

build-depends 部分中的 haq 指的是库,但您的 .cabal 文件未指定如何构建库 - 即。它没有 library 部分。

您将在该维基页面的第 3.2 节中看到 library 部分的外观:(link)

好的 - 设法得出有效的配置。谢谢提示。

这是我的 cabal 文件:

-- Initial haq.cabal generated by cabal init.  For further documentation, 
-- see http://haskell.org/cabal/users-guide/

name:                main
version:             0.1.0.0
license:             GPL-2
license-file:        LICENSE
author:              Bogdan Baranski
build-type:          Simple
cabal-version:       >=1.10

library
  build-depends:       base >=4.8 && <4.9
  exposed-modules:     Main
  default-language:    Haskell2010

executable main
  main-is:             Main.hs
  build-depends:       base >=4.8 && <4.9
  default-language:    Haskell2010

test-suite tests
  ghc-options:         -Wall
  default-extensions:  OverloadedStrings
  type:                exitcode-stdio-1.0
  main-is:             HSpecTests.hs
  build-depends:       base,
                       main,
                       hspec >= 1.8
  default-language:    Haskell2010

此外,我不得不将文件重命名为 "Main.hs" 以使其与内部定义的模块一致(我注意到 Haskell 对这个约定非常敏感:一个模块 "Module" 必须在文件 "Module.hs").

中定义