2014-06-09 13 views
6

Strona z rusztowaniem w Yesod generuje plik Import.hs, który zawiera następujące elementy.Co oznacza `import Some.Module as Import` w Yesod?

module Import 
    (module Import 
    ) where 

import Prelude as Import 
import Yesod as Import 
-- ... 

Do czego służy ten wzór? Rozumiem, że eksportuje on wszystko z modułów zaimportowanych w pakiecie Import.hs, ale czy nie zrobiłby tego samego, ale nie tylko module Import where? Jakie jest znaczenie zagnieżdżonego słowa kluczowego module wewnątrz module Import (module Import) where ...?

Odpowiedz

9

W raporcie języka Haskell wywozu moduł jest opisany jako:

postaci „moduł M” nazwy zbioru wszystkich podmiotów, które są w zakresie zarówno z bezwarunkowe nazwą „e” i kwalifikowana nazwa „Mnie ". Ten zestaw może być pusty.

§5.2 Export Listy

lista eksport identyfikuje podmioty mają być wywożone na podstawie deklaracji modułu. Implementacja modułu może eksportować tylko jednostkę, którą deklaruje lub importuje z innego modułu. Jeśli lista eksportu zostanie pominięta, wszystkie wartości, typy i klasy zdefiniowane w module zostaną wyeksportowane, ale nie te, które zostaną zaimportowane.

Podmioty liście eksportowej może być nazwany w następujący sposób:

  • ...

  • postaci „moduł M” nazwy zbioru wszystkich podmiotów, które są w zakresie zarówno bez zastrzeżeń nazwa "e" i kwalifikowana nazwa "Ja". Ten zestaw może być pusty.

Oznacza to, że z semantycznego:

module Import 
    (module Import 
    ) where 

import Prelude as Import 
import Yesod as Import 
-- ... 

jest wziąć wszystko, co jest zawarte w Prelude i Yesod modułów i wyeksportować go.

Co proponujesz zamiast:

module Import where 

nie eksportować co importowany przez Prelude i Yesod, zgodnie cytat powyżej:

Jeśli lista eksport zostanie pominięty, wszystkie wartości, rodzajów i klas zdefiniowane w module są eksportowane, , ale nie te, które są importowane.