Я участвую в процессе обучения Haskell, и классы типов кажутся мощным способом создания полиморфных функций, безопасных для типа. Но многие функции Haskell Prelude не используют их. Более конкретно:
-
Большинство функций списка не работают с другими структурами данных (например,
foldr
иlength
реализованы только для списков и не могут использоваться на массивах). -
Модули типа
Data.ByteString
непригодны для использования, если вы не используетеimport qualified
, поскольку они включают функции, которые имеют те же имена, что и функции Prelude.
Кажется, что обе эти проблемы исчезнут, если стандартная библиотека использует общие функции с типами классов (пожалуйста, дайте мне знать, если я полностью не согласен с этим).
У меня есть два вопроса:
-
Есть ли технические или дизайнерские причины, по которым Прелюдия такова, или это просто для исторических причин?
-
Оглядываясь, похоже, что есть несколько библиотек (например,
Data.Foldable
и, если я не ошибочно, ломайте свою котельную) которые заменяют стандартные функции Prelude с универсальными альтернативами. Находятся есть ли планы включить эти идеи в будущие версии Haskell?