Ответ 1
-
Data.XYMap.Lazy
иData.XYMap.Strict
для XY
в {"", "Int", "Hash"}
: Вариант *.Strict
заставляет оценивать отображаемые значения до WHNF до их размещения на карте.
Большим преимуществом этого является более предсказуемое поведение пространства и времени, так как гораздо сложнее создать огромные трюки, особенно для типов формы (ConstructorN UnboxedValueTypeN
), что невозможно.
Недостаток - я помню, что были примеры, поднятые, когда обсуждалось, станут ли строгие или ленивые варианты стандартными, но я ничего не помню, в частности.
А, просто вспомнил случай использования: можно связать узел с вариантами Lazy
, что, конечно, невозможно с версиями Strict
! Итак, если вы делаете такие вещи: Lazy
.
Я использую версии Strict
по умолчанию. Пока мне не нужно завязывать узлы или встречаться с другим вариантом использования, когда я рассматриваю варианты Lazy
выше, я не знаю, когда я их буду использовать.
-
Data.(ByteString/Text).Lazy
иData.(ByteString/Text).Strict
В строгих версиях используется один монолитный кусок хранилища для полезной нагрузки, что означает, что вы получаете быстрый произвольный доступ не только последовательно, но и назад с конца или прыгаете туда и сюда.
ленивые версии - это в основном строгие списки строгих блоков, их сила в том, что их последовательное потребление часто можно выполнять в постоянной малой памяти, что отлично, если вам нужно последовательно обрабатывать большие файлы.
Для небольших (ish) данных обязательно используйте варианты Strict
, для огромных данных варианты Lazy
, если данные обрабатываются (более или менее) последовательно.