Size: a a a

2020 May 06

AV

Alexander Vershilov in Haskell
В простых случаях:
1. дублируем
2. не взаимодействуют
3. не мержим
всё просто
источник

MP

Misha Puzanov in Haskell
Alexander Vershilov
В простых случаях:
1. дублируем
2. не взаимодействуют
3. не мержим
всё просто
да, оно самое
источник

AV

Alexander Vershilov in Haskell
Ну мне вот неочевидно, что то, что state внутри async и вне него разные
источник

MP

Misha Puzanov in Haskell
хм
источник

AV

Alexander Vershilov in Haskell
(если реализованы через StateT, а если через IORef внутри, то одинаковые)
источник

MP

Misha Puzanov in Haskell
StateT
источник

AV

Alexander Vershilov in Haskell
И там с исключениями ад
источник

AV

Alexander Vershilov in Haskell
А ещё весело если в ReaderT у тебя что-то, что зависит от треда
источник

AV

Alexander Vershilov in Haskell
Например ThreadId, или LocalProcess
источник

AV

Alexander Vershilov in Haskell
делаешь async и всё разваливается
источник

AV

Alexander Vershilov in Haskell
В общем так делать можно, но надо понимать, что async для монадки, которая не говорит как себя ведёт это не честно
источник

MP

Misha Puzanov in Haskell
Alexander Vershilov
А ещё весело если в ReaderT у тебя что-то, что зависит от треда
не, ну это уже совсем трэш, я так не делаю 🙂

сейчас я делаю руками
a :: (Either MyError a, MyState) <- async $ ((runStateT $ runExceptT $ runReaderT v env) mempty) f

и потом wrapAllBack $ wait a
источник

MP

Misha Puzanov in Haskell
ну и понимаю, что это как раз для Ulift/MonadBaseControl
источник

MP

Misha Puzanov in Haskell
Unlift бестолковый и умеет только ReaderT отклеивать/приклеивать, так что я играюсь в MonadBaseControl
источник

MP

Misha Puzanov in Haskell
но пока не уверен, что руками не будет лучше
источник

AV

Alexander Vershilov in Haskell
Пока Гранин не видит
источник

AV

Alexander Vershilov in Haskell
Смотри, тут очень-очень простая логика
источник

AV

Alexander Vershilov in Haskell
У тебя есть m a, ты хочешь qux :: (a -> IO b) -> .. IO .. превратить в` (a -> m b) -> .. m ..`
источник

MP

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

AV

Alexander Vershilov in Haskell
Как это можно сделать? Тебе нужно взять и построить какое-то действие magic :: (m a -> IO a)
источник