Вывод Cabal перенаправляется, но не генерируется


У меня есть довольно простой проект haskell, где я просто хочу, чтобы фреймворк работал с тестированием и так далее, прежде чем я действительно начну кодировать. У меня есть исходные файлы для исполняемого файла в каталоге /src (где / - корень проекта) и мои тесты в каталоге /testsuite. /testsuite содержит простой тестовый файл под названием TestSuite.hs с main = Test.Framework.defautMain tests в качестве реализации main. Проблема в том, что когда я бегу

cabal clean && cabal configure --enable-tests && cabal build

Я получаю предупреждение

output was redirected with -o, but no output will be generated because there is no main module.

Сборка работает нормально, когда я не уточняйте --enable-tests. Мой файл cabal:

Name:                Example
Version:             0.1
Synopsis:            Synopsis
Description:
    Long description.
License:             GPL
License-File:        LICENSE
Author:              SeanK
Maintainer:          email@example.com
Category:            Development
Build-Type:          Simple
Cabal-Version:       >= 1.8

Test-Suite test
    Type:               exitcode-stdio-1.0
    Main-Is:            TestSuite.hs
    Build-Depends:      base >= 3 && < 5,
                        test-framework,
                        test-framework-quickcheck
                        -- QuickCheck
    Hs-Source-Dirs:     src,
                        testsuite

Executable example
    Main-Is:            Main.hs
    -- Other-Modules:       
    Build-Depends:      base >= 3 && < 5,
                        haskell98
    Hs-Source-Dirs:     src
    Ghc-Options:        -Wall

Я отключил функцию QuickCheck, потому что в данный момент я не использую ( = = > ), что является единственной функцией, которая мне сейчас нужна. Остальное должно быть прямолинейным. Любая помощь будет очень признательна.

2 9

2 ответа:

Вы должны определить имя модуля в вашем файле TestSuite.hs как Main, например там.

Цитата из отчета Haskell 98 :

Программа Хаскелла - это набор модулей, один из которых, по соглашению, должен называться Main и должен экспортировать значение main.

Вместо переименования модуля TestSuite, как предлагает Федор, вы можете добавить опцию GHC, чтобы задать имя основного модуля в файле Cabal:

Test-Suite testFedor
    ghc-options:    -main-is TestSuite

, видимо, междусобойчик main-is и с GHC main-is бывают разные. Я не знаю, как это сделать.