2013-08-06 8 views
16

Ist es möglich, Cabal mitzuteilen, dass alle Module beim Erstellen einer Bibliothek freigelegt werden sollen?Cabal - Alle Module während der Erstellung der Bibliothek freilegen

Im Moment muss ich sehr lange Liste von Modulen in der Exposed-modules Kabale Konfigurationsdatei Abschnitt zur Verfügung stellen.

+0

Fragen Sie, wie man ein Modul in ein Cabal-Projekt einbaut, ohne es in der Datei '.cabal' zu erwähnen? – Heatsink

+0

@Heatsink, no - Wenn Sie eine Bibliothek mit Cabal kompilieren, müssen Sie '<...> .cabal' Konfigurationsdatei schreiben. In dieser Datei müssen Sie den Abschnitt 'Exposed-Module' bereitstellen, in dem Sie ** alle ** Module auflisten müssen, die Sie darstellen möchten. Ich möchte ** alle ** die Module offen legen. –

+0

Das beantwortet meine Frage nicht. Jedes Modul muss in der '.cabal' Datei aufgelistet sein. Interne Module müssen ebenfalls in "Andere Module" aufgeführt sein. Fragen Sie nach alternativen Möglichkeiten, alle Module aufzulisten, oder fragen Sie nach Möglichkeiten, ein Modul zu verwenden, ohne es aufzulisten? – Heatsink

Antwort

6

Die moderne Antwort ist stack + hpack anstelle von expliziten Cabal Config. Es könnte automatisch Paketmodule verfügbar machen und bietet viele weitere Verbesserungen.

8

Sie müssen alle Module in der Cabal-Konfigurationsdatei auflisten. In Ihrem Fall legen Sie einfach die Liste der Module nach exposed-module:. Es gibt keinen einfacheren Weg, eine Liste von Modulen zu schreiben.

Cabal kann die Dateien, die Teil einer ausführbaren Datei oder einer Bibliothek sind, nicht automatisch finden. Daher ist Cabal auf die Liste der Module in der Konfigurationsdatei angewiesen. Im Gegensatz zu GHC kann Cabal keine Module finden, die auf Importanweisungen im Quellcode basieren. Wenn Sie nicht jedes Modul auflisten, können Sie möglicherweise das Projekt erstellen (da GHC Quelldateien finden kann), aber andere Befehle wie cabal sdist greifen nicht auf die Quelldateien zu, die nicht aufgelistet sind.

+8

Wenn Sie 'cabal init' auf einem nicht-verkabelten Quellbaum ausführen, wird 'exposed- Module automatisch, aber Sie müssen das Feld später noch manuell aktualisieren. –

+12

@MichailGlushenkov Das ist ziemlich lächerlich. Es kann die Import-Anweisungen auf "init" parsen (was wahrscheinlich niemand benutzt), aber es kann nicht für jeden anderen Befehl dasselbe tun. Das ist definitiv ein Problem. –

+2

Gibt es externe Tools, die 'exposed-modules' aktualisieren können? Oder kann 'stack' es tun? –

Verwandte Themen