Обычно я твердо верю в использование пространств имен (квалифицированных имен модулей) на большинстве языков, на которых я программирую, так как очень полезно с первого взгляда узнать, откуда взялся определенный идентификатор. В Haskell также есть дополнительное преимущество, заключающееся в избежании конфликтов общих имен с функциями Prelude.
Однако мне кажется, что необходимость помещать пространство имен в инфиксный символ (или другие короткие идентификаторы DSL-y) выглядит очень странно, поэтому у меня возникает соблазн повторно экспортировать значения, например:
import qualified Data.Sequence as Seq
(|>) = (Seq.|>)
(<|) = (Seq.<|)
Что меня сейчас беспокоит, так это that
Ручной реэкспорт значений кажется скучным шаблоном.
Ручной реэкспорт значений обходится существующей модульной системе и, похоже, не работает с конструкторами данных (и, возможно, с другими вещами, с которыми я еще не сталкивался)
импортировать квалифицированные Data.Sequence as Seq
(:>) = (Seq.:>) - выдает ошибку синтаксического анализа:
- "Не входит в объем: конструктор данных`:> '"
Как мне согласовать инфиксные символы и пространство имен? Должен ли я просто сдаться и научиться использовать все пространство имен? Существуют ли установленные передовые практики Haskell в отношении пространств имен и символов?