Вопрос

Я пытаюсь экспортировать только подмножество имен из модуля 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 всезнающий :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top