Как хэппи и Алекс самосовершенствуются?

дерево источника для happy содержит AttrGrammarParser.ly и Parser.ly и дерево источника для alex содержит Scan.x. Тем не менее, насколько я могу судить, для компиляции happy, нам нужно преобразовать .ly файлы .lhs файлы с помощью... happy, и для того, чтобы скомпилировать alex нужно преобразовать .x файлы .hs файлы с помощью... alex.

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

на Setup.lhs файлы для каждого проекта содержат некоторое расширение шаблона, но, насколько я могу судить, ничего не делают для загрузки.

как и где выполняется загрузка?

1 ответов


Я вижу, что вы смотрите на исходное дерево репозиториев darcs для этих пакетов на darcs.haskell.org - ... Если вы посмотрите на фактические tarballs на Hackage, вы увидите что-то немного другое:

https://hackage.haskell.org/package/alex-3.1.4/src/dist/build/alex/alex-tmp/

https://hackage.haskell.org/package/happy-1.19.5/src/dist/build/happy/happy-tmp/

таким образом, в основном необходимые артефакты сборки поставляется с архив здесь. Затем Cabal просто использует артефакты сборки во время процесса сборки, избегая необходимости локальной загрузки. Кабала также знает, как сохранить такие артефакты сборки при запуске cabal sdist для ваших собственных пакетов, которые вы не хотите зависеть от happy или alex, но последний раз я проверил, что это не хорошо взаимодействует с песочницами, fwiw.

кстати, Алекс и happy development переехали в github:

https://github.com/simonmar/alex/

https://github.com/simonmar/happy/