Что делать, если инфиксные символы выглядят некрасиво с квалифицированными именами

Обычно я твердо верю в использование пространств имен (квалифицированных имен модулей) на большинстве языков, на которых я программирую, так как очень полезно с первого взгляда узнать, откуда взялся определенный идентификатор. В Haskell также есть дополнительное преимущество, заключающееся в избежании конфликтов общих имен с функциями Prelude.

Однако мне кажется, что необходимость помещать пространство имен в инфиксный символ (или другие короткие идентификаторы DSL-y) выглядит очень странно, поэтому у меня возникает соблазн повторно экспортировать значения, например:

import qualified Data.Sequence as Seq
(|>) = (Seq.|>)
(<|) = (Seq.<|)

Что меня сейчас беспокоит, так это that

  • Ручной реэкспорт значений кажется скучным шаблоном.

  • Ручной реэкспорт значений обходится существующей модульной системе и, похоже, не работает с конструкторами данных (и, возможно, с другими вещами, с которыми я еще не сталкивался)

     импортировать квалифицированные Data.Sequence as Seq
    (:>) = (Seq.:>) - выдает ошибку синтаксического анализа:
     - "Не входит в объем: конструктор данных`:> '"
    

Как мне согласовать инфиксные символы и пространство имен? Должен ли я просто сдаться и научиться использовать все пространство имен? Существуют ли установленные передовые практики Haskell в отношении пространств имен и символов?

10
задан hugomg 28 January 2012 в 05:54
поделиться