2015-08-01 6 views
9

Es ist möglich, keine Namen eines Moduls zu exportieren, indem Sie die Angabe nur ein Paar von Klammern, wie die Exportliste:Wenn Sie eine leere Exportliste angeben, kann das nützlich sein?

module MyModule() where 

In welchen Szenarien dies nützlich wäre? Soweit ich weiß, kann jede Datei, die MyModule importiert, keine Funktionen oder Typen verwenden, die in MyModule deklariert sind. An diesem Punkt scheint es ein nutzloses Merkmal der Sprache zu sein, aber ich nehme an, dass es aus einem bestimmten Grund da ist.

+4

Auch wenn es sinnlos wäre, die Grammatik zu komplizieren den leeren Fall nicht zuzulassen scheint noch weniger Wert zu haben. Tatsächlich glaube ich, dass Klasseninstanzen immer noch exportiert werden. –

+0

Ich möchte nur darauf hinweisen, dass ich generell davon abraten würde, dies zu tun, da es zwar Instanzen exportiert, aber verwaiste Instanzen sind. – MasterMastic

Antwort

7

Ein solches Modul exportiert weiterhin alle dort definierten Klasseninstanzen.

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

Danke für eine klare und informative Antwort. – Kapol

Verwandte Themen