La mia comprensione è che la sintassi tratteggiata dei moduli, in Haskell, rappresenta la struttura logica su disco. Quindi, se abbiamo una struttura come questa:Specifica dei moduli Haskell "Up The Tree"
Main.hs
Foo/
Bar.hs -- exports "Bar"
Quux.hs -- exports "Quux"
... poi nel nostro Main.hs
, possiamo fare:
import Foo.Bar
import Foo.Quux
(presumo che possiamo avere solo moduli a nodi foglia del filesystem Ad esempio, in precedenza, non è possibile avere un modulo Foo
.)
In questo esempio, stiamo attraversando l'albero. Cosa succede se vogliamo salire?
lib/
SomeModule.hs
XYZ.hs
src/
Main.hs
Cioè, in Main.hs
, come possiamo importare SomeModule
o XYZ
?
Forse questo non sarebbe un evento comune con Main
, ma per quanto riguarda le dipendenze tra moduli? Potrebbero avere legittimamente bisogno di fare riferimento ai nodi "cugini".
È molto comune disporre di moduli nelle "filiali", ad es. crea '' 'Foo.hs''' nella stessa directory di' '' Foo/'' 'dir – amindfv
Inoltre, per essere precisi: la sintassi tratteggiata dei moduli rappresenta la struttura logica su disco * in GHC *. Il Report in sé non fornisce alcuna indicazione su come i moduli siano archiviati su disco, e un'implementazione rivale potrebbe scegliere di fare altre cose: avere un file manifest, usare un database, archiviare cose nel cloud ... –