Как упражнение в Haskell, я пытаюсь реализовать heapsort. Куча обычно реализуется как массив на императивных языках, но это было бы крайне неэффективно на чисто функциональных языках. Поэтому я просмотрел двоичные кучи, но все, что я нашел до сих пор, описывает их с императивной точки зрения, и представленные алгоритмы трудно перевести на функциональные настройки. Как эффективно реализовать кучу в чисто функциональном языке, таком как Haskell?
Изменить: по эффективности я имею в виду, что он все равно должен быть в O (n * log n), но ему не нужно бить программу C. Кроме того, я хотел бы использовать чисто функциональное программирование. Что еще могло бы сделать это в Haskell?