2015-08-01 10 views
9

Możliwe jest eksportowanie żadnych nazw modułu przez podanie tylko parę nawiasie jako listy eksportowej:Podczas określania pustej listy eksportu może być przydatna?

module MyModule() where 

W której scenariusze byłoby to przydatne? O ile rozumiem, każdy plik importujący MyModule nie będzie mógł korzystać z żadnych funkcji ani typów zadeklarowanych w MyModule. W tym momencie wydaje się bezużyteczną cechą języka, ale przypuszczam, że jest to z jakiegoś powodu.

+4

Nawet gdyby było bezużyteczne, komplikując gramatyki aby uniemożliwić pusty przypadek wydaje się mieć jeszcze mniejszą wartość. W rzeczywistości wierzę, że instancje klasy biznesowej będą nadal eksportowane. –

+0

Po prostu chcę zauważyć, że generalnie odradzam robienie tego, ponieważ podczas eksportowania instancji będą to osierocone instancje. – MasterMastic

Odpowiedz

7

Moduł taki nadal będzie eksportować wszystkie zdefiniowane w nim wystąpienia klasy.

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

Dzięki za jasną i pełną informacji odpowiedź. – Kapol

Powiązane problemy