Size: a a a

2021 June 29

X

XÆA-XII in Haskell
И зачем же он вообще тогда нужен?
источник

K

Kir in Haskell
Чтобы через него пакеты ставить. Ты через cabal new-install ставил? Через stack ещё попробуй. Или через родной пакетный менеджер дистрибутива.
источник

X

XÆA-XII in Haskell
через cabal install
источник

K

Kir in Haskell
cabal new-install попробуй
источник

X

XÆA-XII in Haskell
Ну вот где вы раньше были
источник

X

XÆA-XII in Haskell
В следующий раз попробую
источник

X

XÆA-XII in Haskell
Сейчас уже stack накатил
источник

K

Kir in Haskell
Дык мне не платят, за то что я тут консультирую)
источник

X

XÆA-XII in Haskell
А как же огромное человеческое спасибо?
источник

K

Kir in Haskell
Вполне возможно кабал придётся обновить, он только с 3 версии new-install может
источник

A

Aleksandr Khristenko in Haskell
cabal install уже давно то-же самое что new-install
источник

K

Kir in Haskell
> давно

Может у него дебиан!

Ну тогда stack.
источник

X

XÆA-XII in Haskell
У меня рач
источник

A

Aleksandr Khristenko in Haskell
Мы вроде давно определились что у него arch. Хотя это не принципиально, в линуксе cabal стоит тащить через ghcup, а значит будет последний.
источник

K

Kir in Haskell
Тогда stack install
источник

MK

Maxim Koltsov in Haskell
Да сколько можно этот хмонад тут мусолить
источник

X

XÆA-XII in Haskell
Да, кстати
источник

IO

I O in Haskell
ContT withNecropostMode

Эти версии replaceWithMinimum с точки зрения производительности очевидно такое себе, там везде не хвостоворекурсивные вызовы, каждая итерация жрет три, если не ошибаюсь, слова стека, значит расходы на мувы, проверки на оверфлоу, возможно нагрузка на гц. В этом смылсе мой вариант через foldl' с бангом куда удачнее

replaceWithMinimumFoldl' :: [Int] -> [Int]
replaceWithMinimumFoldl' l = fl
 where
   (!fm, fl) = foldl' (\(cm, cl) x -> (cm `min` x, fm:cl)) (head l, []) l

N = 10000, default rtsopts:

benchmarking foldl' by @aadaa_fgtaa         78.47 μs   (77.92 μs .. 78.95 μs)
benchmarking recursive strict by @kana_sama 135.9 μs   (134.2 μs .. 138.0 μs)
benchmarking fix strict by @lierdakil       149.5 μs   (148.2 μs .. 151.3 μs)
benchmarking naiveReplace                   140.5 μs   (139.4 μs .. 142.0 μs)
benchmarking naiveReplicate                 146.8 μs   (141.2 μs .. 154.3 μs)

Ну и кончено при больших N, когда новый лист в nursery не лезет, наивные версии будут куда быстрее, тк они список лениво строят, а однопроходные строят сразу весь и грузят гц. Так что для списков это наверное такая себе идея. Может быть для векторов лучше будет, хотя с анбоксед не работает, так что все равно наверное быстрее просто дважды пройтись.

N = 1000000, default rtsopts

benchmarking foldl' by @aadaa_fgtaa         62.76 ms   (59.64 ms .. 65.79 ms)
benchmarking recursive strict by @kana_sama 85.19 ms   (82.22 ms .. 88.49 ms)
benchmarking fix strict by @lierdakil       98.12 ms   (91.22 ms .. 105.8 ms)
benchmarking naiveReplace                   16.05 ms   (15.92 ms .. 16.20 ms)
benchmarking naiveReplicate                 14.77 ms   (14.64 ms .. 14.93 ms)

N = 1000000, -A128M

benchmarking foldl' by @aadaa_fgtaa         12.44 ms   (12.08 ms .. 12.89 ms)
benchmarking recursive strict by @kana_sama 21.47 ms   (21.23 ms .. 21.75 ms)
benchmarking fix strict by @lierdakil       24.00 ms   (23.39 ms .. 24.67 ms)
benchmarking naiveReplace                   20.97 ms   (20.74 ms .. 21.24 ms)
benchmarking naiveReplicate                 18.54 ms   (17.52 ms .. 19.52 ms)

А вот почему наивные версии с большем хипом медленнее работают для меня тоже загадка

ghc-9.0.1 -O2 https://gist.github.com/aadaa-fgtaa/484cba57b63d86b9158029a4238830a5
источник

X

XÆA-XII in Haskell
Проблемы уже нет больше
источник

X

XÆA-XII in Haskell
Уже девятый?
источник