Size: a a a

2021 March 08

AP

Aleksei (astynax) Pi... in Haskell
Он позволит обернуть в чистую [a] -> [a]?
источник

AP

Aleksei (astynax) Pi... in Haskell
Нет ведь?
источник

DS

Dmitrii Skurikhin in Haskell
Jerzy Syrowiecki
иммутабельный вектор можно разморозить, помутировать и заморозить обратно, но заморозка — это линейное копирование.

можно ли будет делать Vector.swap за O(1) с линтиповой заморозкой?
если swap для внутренних нужд, можно сделать unsafe без копии
источник

JS

Jerzy Syrowiecki in Haskell
Dmitrii Skurikhin
если swap для внутренних нужд, можно сделать unsafe без копии
да, unsafeThaw/unsafeFreeze, но там надо быть очень внимательным. я не знаю, как доказать, что нет копий, даже "для внутренних нужд"
источник

DS

Dmitrii Skurikhin in Haskell
функция используется внутри модуля но не экспортится наружу
источник

JS

Jerzy Syrowiecki in Haskell
Dmitrii Skurikhin
функция используется внутри модуля но не экспортится наружу
как это поможет справиться с копиями данных?
источник

JS

Jerzy Syrowiecki in Haskell
Aleksei (astynax) Pirogov
Он позволит обернуть в чистую [a] -> [a]?
не понял. можешь переформулировать вопрос?
источник

JS

Jerzy Syrowiecki in Haskell
Jerzy Syrowiecki
да, unsafeThaw/unsafeFreeze, но там надо быть очень внимательным. я не знаю, как доказать, что нет копий, даже "для внутренних нужд"
а, кстати да, через unsafeThaw+unsafeFreeze можно написать linearSwap
источник

AP

Aleksei (astynax) Pi... in Haskell
Jerzy Syrowiecki
не понял. можешь переформулировать вопрос?
IOVector можно мутировать только в IO?
источник

JS

Jerzy Syrowiecki in Haskell
Aleksei (astynax) Pirogov
IOVector можно мутировать только в IO?
да (через unsafe — в ST и далее везде)
источник

AP

Aleksei (astynax) Pi... in Haskell
Автор изначального вопроса хотел как раз что-то вроде оттаивания/заморозки
источник

AP

Aleksei (astynax) Pi... in Haskell
Jerzy Syrowiecki
да (через unsafe — в ST и далее везде)
Ок, спс
источник

DS

Dmitrii Skurikhin in Haskell
Jerzy Syrowiecki
как это поможет справиться с копиями данных?
1 раз только копировать в том, что идёт на экспорт
источник

JS

Jerzy Syrowiecki in Haskell
Aleksei (astynax) Pirogov
Автор изначального вопроса хотел как раз что-то вроде оттаивания/заморозки
не факт. скорее, автор хотел скопировать императивное решение в Хаскель
источник

AP

Aleksei (astynax) Pi... in Haskell
Он же написал "внутри помутировать"
источник

AP

Aleksei (astynax) Pi... in Haskell
Это как раз на оттаивание/заморозку похоже
источник

AP

Aleksei (astynax) Pi... in Haskell
В Clojure такое практикуют, например (transients). Там оно ещё и без копирования работает за O(1), но нужно обеспечивать потокобезопасность
источник

JS

Jerzy Syrowiecki in Haskell
Dmitrii Skurikhin
1 раз только копировать в том, что идёт на экспорт
всё ещё что-то невероятное
источник

DS

Dmitrii Skurikhin in Haskell
ну 2
источник

JS

Jerzy Syrowiecki in Haskell
Aleksei (astynax) Pirogov
В Clojure такое практикуют, например (transients). Там оно ещё и без копирования работает за O(1), но нужно обеспечивать потокобезопасность
это то же самое, что и runST+unsafeThaw+unsafeFreeze?
источник