Использование alex/happy with Cabal

Я пишу компилятор для класса, который я беру. Класс не специально Haskell, но я использую Haskell для написания моего компилятора и интерпретатора. У меня есть установка пакета для кэба, чтобы, надеюсь, облегчить запуск/компиляцию моего профессора. У меня есть счастливый и alex в поле build-tools для обоих исполняемых файлов, но Cabal игнорирует это, а затем жалуется, что он не может найти модули, которые Happy и Alex должны генерировать. Если я запускаю вручную:

alex LimpScanner.x
happy LimpParser.y

тогда cabal отлично работает.

Я думал, что у меня была автоматическая подзарядка, но, возможно, я помню, что она несовершенна.

limp.cabal:

-- limp.cabal auto-generated by cabal init. For additional options,
-- see
-- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.
-- The name of the package.
Name: limp
-- The package version. See the Haskell package versioning policy
-- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
-- standards guiding when and how versions should be incremented.
Version: 0.1
-- A short (one-line) description of the package.
Synopsis: LIMP Compiler (Compiler Construction course project)
-- A longer description of the package.
-- Description: 
-- URL for the project homepage or repository.
Homepage: http://www.cs.rit.edu/~eca7215/limp/
-- The license under which the package is released.
License: AllRightsReserved
-- The file containing the license text.
License-file: LICENSE
-- The package author(s).
Author: Edward Amsden
-- An email address to which users can send suggestions, bug reports,
-- and patches.
Maintainer: [removed_email]u
-- A copyright notice.
-- Copyright: 
Category: Language
Build-type: Simple
-- Extra files to be distributed with the package, such as examples or
-- a README.
-- Extra-source-files: 
-- Constraint on the version of Cabal needed to build this package.
Cabal-version: >=1.2
Executable limp
 -- .hs or .lhs file containing the Main module.
 Main-is: Limp.hs
 hs-source-dirs: src 
 -- Packages needed in order to build this package.
 Build-depends: base, array, haskell98 
 -- Modules not exported by this package.
 -- Other-modules: 
 -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
 Build-tools: alex, happy
Executable limpi
 Main-is: LimpInterpreter.hs
 hs-source-dirs: src
 Build-depends: base, array, haskell98
 Build-tools: alex, happy

Макет каталога:

limp/
├── Setup.hs
├── limp.cabal
└── src/
 ├── Limp.hs
 ├── LimpInterpreter.hs
 ├── LimpParser.ly
 ├── LimpScanner.x
 └── LimpToken.hs
2 ответа

Очевидно, что я отсутствовал, это поле Other-modules:. Как только это было добавлено, счастливая кабала (простите за каламбур) построила моего переводчика.


Для Уоррен Харрис и других, подобных ему (и мне), которые могут появиться позже, другие модули должны быть настроены на список имен модулей, которые (я предполагаю?), как ожидается, будут созданы с помощью инструментов, перечисленных в сборке -Инструменты.

Итак, в моем случае соответствующие разделы моего файла .cabal выглядели следующим образом:

build-tools: alex, happy
other-modules: Language.Heidi.Parser,
 Language.Heidi.Lexer

licensed under cc by-sa 3.0 with attribution.