В С++ и других языках библиотеки дополнений реализуют контейнер с несколькими индексами, например. Boost.Multiindex. То есть коллекция, которая хранит один тип значения, но поддерживает несколько разных индексов над этими значениями. Эти индексы обеспечивают различные способы доступа и способы сортировки, например. map, multimap, set, multiset, array и т.д. Сложность выполнения многоиндексного контейнера обычно представляет собой сумму сложностей отдельных индексов.
Есть ли эквивалент для Haskell или люди создают свои собственные? В частности, каков наиболее идиоматический способ реализации коллекции типа T с индексом заданного типа (T - это экземпляр Ord
), а также индекс типа карты (предположим, что ключевое значение типа K может быть предоставлено для каждого T либо явно, либо через функцию T -> K
)?