Почему реализация Haskell так сосредоточена на связанных списках?
Например, я знаю, что Data.Sequence более эффективен
с большинством операций со списками (за исключением операции cons
) и часто используется;
синтаксически же он «почти не поддерживается». Haskell приложил много усилий для создания функциональных абстракций, таких как Functor и Foldable class, но их синтаксис несовместим с синтаксисом списка по умолчанию.
Если в проекте я хочу оптимизировать и заменить свои списки на последовательности - или если мне вдруг понадобится поддержка бесконечных коллекций и я заменю свои последовательности списками - результирующие изменения кода отвратительны.
Так что я думаю, что мои сомнения можно конкретизировать в таких вопросах, как:
равный (Functor f) => (a -> b) -> fa -> fb
? []
и (:)
могут использоваться, например, для типа в Data.Sequence? Я действительно надеюсь, что этому есть какое-то объяснение, которое не Не включайте слова «обратная совместимость» или «она просто так выросла», хотя, если вы думаете, что это не так, дайте мне знать. Также приветствуются любые соответствующие языковые расширения.