GHC отказывается экспортировать квалифицированные модули

Я хочу записать модуль, который реэкспортирует некоторый модуль, который он импортировал квалифицированный. Что-то вроде этого:

module Foo.A
  ( module Foo.B
  , module Foo.C
  ) where
import qualified Foo.B
import qualified Foo.C

-- bunch of code using Foo.B and Foo.C here

Это похоже на него, должен работать; однако, GHC печатает предупреждения об экспорте:

Foo/A.hs:2:5:
    Warning: the export item `module Foo.B' exports nothing

Foo/A.hs:3:5:
    Warning: the export item `module Foo.C' exports nothing

И GHCI отказывается загружать экспорт от них.

Я могу решить это путем создания импорта дисквалифицированным, но затем конфликты имен, вероятно, возникнут между тем импортом и основным кодом модуля.

Там какой-либо путь состоит в том, чтобы заставить GHC экспортировать эти модули?

18
задан Don Stewart 19 April 2011 в 03:24
поделиться

1 ответ

Нет, это не просто ограничение GHC, это способ импорта а экспорт предназначен для работы в Haskell.

В модуле есть только контроль собственного пространства имен - он не может повлиять на то, что люди можно увидеть из других пространств имен. Модуль «реэкспорт» - это просто сокращение от «экспортировать все символов в моем собственном пространстве имен, которые имеют были импортированы сюда из другого модуля ". Но символы что вы импортировали квалифицированные, на самом деле не в вашем собственном пространство имен.

Если вы хотите экспортировать два разных символа с одно и то же, вы не сможете сделать это из одного модуля. Разделите модуль на два и экспортируйте каждую версию из другой модуль.

13
ответ дан 30 November 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: