Я хотел бы использовать тип, который ведет себя как простой список пар [(a,b)]
, который служит словарем, сопоставляя ключи типа a
значениям типа b
, сохраняя «заданный пользователем» определенный порядок ключей. (то есть, как и в случае с обычными списками - я хотел бы иметь возможность «добавлять» элемент, который затем распознается как «последний элемент».) Однако я хотел бы, чтобы поиск с произвольным доступом по ключам был лучше, чем линейная производительность, т.е. что Data.Map
. Одним из вариантов было бы просто поддерживать обычную карту в дополнение к списку ключей, который определяет их порядок:
data OrderedDict a b = OrderedDict (Map a b) [a]
, а затем определить операции добавления
и т. д., которые синхронизируют две коллекции ключей. Однако кажется уродливым поддерживать две отдельные коллекции одних и тех же ключей. Существует ли готовый тип данных, который уже сочетает упорядоченные ключи с эффективным поиском произвольного доступа по ключу?