2013-08-06 5 views
16

È possibile indicare allo Cabal di esporre tutti i moduli durante la creazione di una libreria?Cabal - Esporre tutti i moduli durante la creazione della libreria

Al momento devo fornire un elenco molto lungo di moduli nella sezione del file di configurazione cabala Exposed-modules.

+0

Stai chiedendo come incorporare un modulo in un progetto di cabala senza menzionarlo nel file '.cabal'? – Heatsink

+0

@Heatsink, no - Se si sta compilando una libreria con cabal, è necessario scrivere il file di configurazione '<...> .cabal'. In questo file devi fornire la sezione 'Exposed-modules' in cui devi elencare ** ogni ** modulo che vuoi esporre. Voglio esporre ** tutti ** i moduli. –

+0

Questo non risponde alla mia domanda. Ogni modulo deve essere elencato nel file '.cabal'. Anche i moduli interni devono essere elencati in "Altri moduli". Stai chiedendo modi alternativi di elencare tutti i moduli, o stai chiedendo modi per utilizzare un modulo senza elencarlo? – Heatsink

risposta

6

La risposta moderna è stack + hpack anziché utilizzare la configurazione di cabla esplicita. Potrebbe esporre automaticamente i moduli del pacchetto e fornisce molti altri miglioramenti.

8

È necessario elencare tutti i moduli nel file di configurazione della cabala. Nel tuo caso, inserisci l'elenco dei moduli dopo exposed-module:. Non esiste un modo più semplice per scrivere un elenco di moduli.

Cabal non è in grado di trovare automaticamente i file che fanno parte di un file eseguibile o libreria, quindi si basa sull'elenco di moduli nel file di configurazione. A differenza di GHC, la cabala non può trovare moduli basati su istruzioni di importazione nel codice sorgente. Se non si elenca tutti i moduli, sarà possibile creare il progetto (perché GHC può trovare i file di origine), ma altri comandi come cabal sdist non accedono ai file di origine che non sono elencati.

+8

Se si esegue 'cabal init' su un albero di sorgenti non cabalizzato, popolerà' exposed- moduli' automaticamente, ma in seguito sarà necessario aggiornare manualmente il campo. –

+12

@MikhailGlushenkov Questo è abbastanza ridicolo. Può analizzare le istruzioni di importazione su "init" (che probabilmente nessuno usa mai), ma non può fare lo stesso per nessun altro comando. Questo è sicuramente un problema. –

+2

Esistono strumenti esterni che possono aggiornare 'exposed-modules'? O può 'stack' farlo? –