2010-12-09 3 views
3

J'essaye d'exporter juste un sous-ensemble de noms à partir d'un module Haskell, mais ghci me permet heureusement d'accéder même aux noms cachés.Modules Haskell: noms cachés et ghci

module Hiding (shown, calc) where 

calc = shown * hidden 

shown :: Int 
shown = 3 

hidden :: Int 
hidden = 2 

Mais si vous essayez ceci dans ghci je reçois:

Prelude> :l Hiding.hs 
[1 of 1] Compiling Hiding   (Hiding.hs, interpreted) 
Ok, modules loaded: Hiding. 
*Hiding> hidden 
2 

Qu'est-ce que je fais mal?

(Edit: pour ce que ça vaut, j'utilise ghci 6.12.3 Arch Linux)

Répondre

5

Il semble que GHCi charge votre module pour que vous l'examiniez, c'est-à-dire que vous soyez dans le champ d'application du module. Deux conseils à cela sont l'invite *Hiding> et le fait que vous avez accédé à la fonction cachée.

Edit:
End y est: http://www.haskell.org/ghc/docs/latest/html/users_guide/interactive-evaluation.html#id3045728

+2

Merci, voilà. Je peux le contourner comme ceci: Prelude>: l Hiding.hs [1 of 1] Compilation de dissimulation (Hiding.hs, interprété) Ok, modules chargés: Masquage. * Masquage>: m -Hiding >: m + Masquage Masquage> bien que cela soit assez maladroit – oggy

+2

@oggy-ghci ne le fera que pour les modules interprétés. Si vous compilez Hiding.hs en premier, ghci peut importer le module à partir du fichier objet et seules les fonctions exportées seront visibles. –

0

Il me semble que vous avez fait la bonne chose. Si vous essayez de faire référence à ce module à partir d'un autre module, je parie que hidden refuse de travailler. Peut-être que GHCI est omniscient :)