2015-08-01 10 views
9

E 'possibile esportare nessun nome di un modulo specificando solo un paio di parentesi come la lista di esportazione:Quando si può specificare una lista di esportazione vuota può essere utile?

module MyModule() where 

In quali scenari questo sarebbe utile? Per quanto ho capito, qualsiasi importazione di file MyModule non sarà in grado di utilizzare alcuna funzione o tipo dichiarato all'interno di MyModule. A questo punto sembra una caratteristica inutile del langauge, ma suppongo che sia lì per un motivo.

+4

Anche se fosse inutile, complicando la grammatica per disabilitare il caso vuoto sembra avere ancora inferiore. In effetti, credo che le istanze di typeclass saranno ancora esportate. –

+0

Voglio solo notare che generalmente sconsiglio di farlo perché mentre esporterà le istanze, saranno istanze orfane. – MasterMastic

risposta

7

Tale modulo continuerà ad esportare qualsiasi istanza di classe in essa definita.

module A where 

class Foo f where 
    foo :: f 

data Bar = Bar deriving (Show) 

module B() where 

import A 

instance Foo Bar where 
    foo = Bar 

module C where 

import A 
import B -- won't compile without this import! 

main = print (foo :: Bar) 
+0

Grazie per una risposta chiara e informativa. – Kapol

Problemi correlati