Модули Haskell: скрытые имена и GHCI
-
10-10-2019 - |
Вопрос
Я пытаюсь экспортировать только подмножество имен из модуля Haskell, но GHCI с радостью позволяет мне получить доступ даже к скрытым именам.
module Hiding (shown, calc) where
calc = shown * hidden
shown :: Int
shown = 3
hidden :: Int
hidden = 2
Но когда я пытаюсь это в GHCI, я получаю:
Prelude> :l Hiding.hs
[1 of 1] Compiling Hiding ( Hiding.hs, interpreted )
Ok, modules loaded: Hiding.
*Hiding> hidden
2
Что я делаю не так?
(РЕДАКТИРОВАТЬ: Для того, что это стоит, я использую GHCI 6.12.3 на Arch Linux)
Решение
Похоже, что GHCI загружает ваш модуль для вас, чтобы осмотреть его, т.е. вкладывает вас в объем модуля. Два подсказки на это - это подсказка *Hiding>
и тот факт, что вы получили доступ к скрытой функции.
Редактировать:
Конец там это: http://www.haskell.org/ghc/docs/latest/html/users_guide/interactive-valuation.html#id3045728
Другие советы
Мне кажется, что ты поступил правильно. Если вы попытаетесь ссылаться на этот модуль из другого модуля, я ставлю hidden
отказывается работать. Может быть, GHCI всезнающий :)