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