Дизайн «коллекций» языка Haskell

Почему реализация Haskell так сосредоточена на связанных списках?

Например, я знаю, что Data.Sequence более эффективен с большинством операций со списками (за исключением операции cons ) и часто используется; синтаксически же он «почти не поддерживается». Haskell приложил много усилий для создания функциональных абстракций, таких как Functor и Foldable class, но их синтаксис несовместим с синтаксисом списка по умолчанию.

Если в проекте я хочу оптимизировать и заменить свои списки на последовательности - или если мне вдруг понадобится поддержка бесконечных коллекций и я заменю свои последовательности списками - результирующие изменения кода отвратительны.

Так что я думаю, что мои сомнения можно конкретизировать в таких вопросах, как:

  1. Почему нет тип карты равный (Functor f) => (a -> b) -> fa -> fb ?
  2. Почему не могут [] и (:) могут использоваться, например, для типа в Data.Sequence?

Я действительно надеюсь, что этому есть какое-то объяснение, которое не Не включайте слова «обратная совместимость» или «она просто так выросла», хотя, если вы думаете, что это не так, дайте мне знать. Также приветствуются любые соответствующие языковые расширения.

20
задан wen 15 November 2010 в 01:42
поделиться