Какие существуют библиотеки, которые реализуют строгие структуры данных? В частности, я ищу строгие списки и строгие наборы.
Отказ от ответственности:
-
Я знаю о глубине. Это очень полезно, но он добавляет накладные расходы на перемещение всей структуры данных каждый раз, когда вы используете deepseq (что может быть несколько раз).
-
Я знаю, что строгая структура данных, подобная контейнеру, не обеспечить все, что он содержит, будет полностью оценена, но структура сам должен быть строгим, например:
data StrictList a = !a :$ !(StrictList a) | Empty
(Здесь содержащиеся элементы находятся в WHNF и, возможно, не полностью оценены, но структура списка такова. Например, бесконечные списки будут непереходными значениями.)
-
Я знаю о "строгом" пакете хака, но он очень ограниченный набор строгих структур данных. Он не содержит строгих списков и наборов.
-
Написание строгих списков может показаться удивительно легким (я люблю ghc's расширения для получения Functor, Traversable и Foldable, кстати.), но это по-прежнему кажется, что лучше было бы сделать это в отдельной библиотеке. А также эффективные реализации множеств не кажутся мне тривиальными.