Я хочу записать модуль, который реэкспортирует некоторый модуль, который он импортировал квалифицированный. Что-то вроде этого:
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 экспортировать эти модули?
Нет, это не просто ограничение GHC, это способ импорта а экспорт предназначен для работы в Haskell.
В модуле есть только контроль собственного пространства имен - он не может повлиять на то, что люди можно увидеть из других пространств имен. Модуль «реэкспорт» - это просто сокращение от «экспортировать все символов в моем собственном пространстве имен, которые имеют были импортированы сюда из другого модуля ". Но символы что вы импортировали квалифицированные, на самом деле не в вашем собственном пространство имен.
Если вы хотите экспортировать два разных символа с одно и то же, вы не сможете сделать это из одного модуля. Разделите модуль на два и экспортируйте каждую версию из другой модуль.