Я пишу чертежный пакет с некоторыми частями, и у меня есть операторы и типы данных, разбросанные по всему. Однако я не хочу, чтобы пользователи добавляли соответствующие модули каждый раз, так как это было бы довольно грязно, например, у меня были бы класс Point
, роль Monoid
и класс Style
по разным путям, например this
unit module Package::Data::Monoid;
# $?FILE = lib/Package/Data/Monoid.pm6
role Monoid {...}
unit module Package::Data::Point;
# $?FILE = lib/Package/Data/Point.pm6
class Point {...}
unit module Package::Data::Style;
# $?FILE = lib/Package/Data/Style.pm6
class Style {...}
Я хотел бы иметь haskell
подобную прелюдию в lib/Package/Prelude.pm6
с тем эффектом, что вместо этого я могу писать такие сценарии
use Package::Prelude;
# I can use Point right away, Style etc...
делать
use Package::Data::Style;
use Package::Data::Point;
use Package::Data::Monoid;
# I can too use point right away, but for users not knowing the
# inner workings it's too overwhelming
Я пробовал много вещей:
- Эта версия не дает мне правильного эффекта, я должен ввести весь путь к точке, т.е.
Package::Data::Point
...
unit module Package::Prelude;
# $?FILE = lib/Package/Prelude.pm6
use Package::Data::Style;
use Package::Data::Point;
use Package::Data::Monoid;
- Эта версия дает мне
Point
сразу, но у меня возникают проблемы с операторами и так далее, также я бы просто хотел добавить автоматически все из экспортированных подпрограмм в упомянутых примерах пакетов.
# $?FILE = lib/Package/Prelude.pm6
use Package::Data::Style;
use Package::Data::Point;
use Package::Data::Monoid;
sub EXPORT {
hash <Point> => Point
, <Style> => Style
, <mappend> => &mappend
...
}
Знаете ли вы, кто знает, как лучше и быстрее получить такой прелюдоподобный файл?