Size: a a a

2020 December 02

MP

Misha Puzanov in Haskell
Misha Puzanov
data Action = Nope | InProgress (IO a) | Done a
type Cache a = TVar (Map Id (Action (IO a)))

?
data Action a = Nope | InProgress (Async a) | Done a | Failed Text
источник

к

кана in Haskell
Ilya Kos
TVar с мапой и forkIO который раз в секунду убивает все что старше n секунд
не нужен даже убиватель, если делать MVar

действие после завершения должно само себя убрать из мапы

если кто-то идет в мапу, а там есть действие, то оно просто будет ждать один и тот же MVar с другими подписчиками, а новый подписчик после завершения действия просто создаст новый MVar
источник

IK

Ilya Kos in Haskell
кана
не нужен даже убиватель, если делать MVar

действие после завершения должно само себя убрать из мапы

если кто-то идет в мапу, а там есть действие, то оно просто будет ждать один и тот же MVar с другими подписчиками, а новый подписчик после завершения действия просто создаст новый MVar
Ну я думал что кеш нужен после завершения действия
источник

AV

Alexander Vershilov in Haskell
Не у меня есть реализация, но мне лень тащить её
источник

AV

Alexander Vershilov in Haskell
data Action a = Nope | InProgress (Async a) | Done a | Failed Text

последние 3 можно заменить на Async a
источник

MP

Misha Puzanov in Haskell
кстати да
источник

MP

Misha Puzanov in Haskell
я как-то делал что-то подобное и угодил в rabbit hole, получилось  развесистое страшное говно, так что наверное лучше взять библиотеку, если она есть
источник

AV

Alexander Vershilov in Haskell
Ну у меня PSQ Int key (Lazy value)
источник

AV

Alexander Vershilov in Haskell
что-то такое https://github.com/cheopslab/lazy-cache/blob/master/src/System/Cache/Impl/Ghc.hs
но может что получше есть
источник

к

кана in Haskell
Alexander Vershilov
Не у меня есть реализация, но мне лень тащить её
вот это не то что нужно? Для аргументов придется добавить мапку правда

https://gist.github.com/kana-sama/e54f83eeea11895cd64a5e38cc67f74a
источник

AN

Alexander N. in Haskell
Danil Berestov
А nixos ставил себе кто-нибудь?
Ставил, 4 года назад, стоит, работает.  Если какие-то конкретные вопросы — лучше и правда на @ru_nixos спросить (можно mention меня там)
источник

AV

Alexander Vershilov in Haskell
кана
вот это не то что нужно? Для аргументов придется добавить мапку правда

https://gist.github.com/kana-sama/e54f83eeea11895cd64a5e38cc67f74a
Тут race conduition миниум 1
источник

AV

Alexander Vershilov in Haskell
И потенциальный дедлок минимум 1
источник

AV

Alexander Vershilov in Haskell
race - оба считали пустые данные и оба пытаются записать
источник

к

кана in Haskell
ну нужно как-то readTVarIO cache засунуть в atomically
источник

AV

Alexander Vershilov in Haskell
дедлок - если тред умер на исключении
источник

к

кана in Haskell
но не знаю как
источник

AV

Alexander Vershilov in Haskell
https://github.com/cheopslab/lazy-cache/blob/master/src/System/Cache/Impl/MVar.hs

так я на MVar делал, щас найду решение
источник

AV

Alexander Vershilov in Haskell
источник

AV

Alexander Vershilov in Haskell
В твоём аналог это в ветке сделать TMVar но в atomically снова проверять не пустой ли и возвращать either
источник