Alexander
с разными стейтами
Anatolii
а как тогда ты в таких ситуациях делаешь?:)
Alexander
когда надо было то можно линзы
Anatolii
понятно
Anatolii
я до линз еще не дошел
Alexander
а так у меня чаще код достаточно простой что не лень TF
Alexander
трансформеры
Alexander
где нету магии с автоматическими лифтами, но и нет проблем
Anatolii
это когда StateT и т.д.?
Alexander
да
Anatolii
я ж так понял можно похожее писать MonadState MonadReader...
Alexander
вообще в последнее время у меня код сильно в IO
Anatolii
но мне это тоже магией показалось
Alexander
ну или каким-нить враппером над ним
Alexander
и мне лень городить стеки монад поверх
Anatolii
ну вот ты же врапер делаешь
Anatolii
понятно
Alexander
хотя я мне эта привычка не нравится
Anatolii
ну просто я всегда люблю изолировать IO
Alexander
лучше по умолчанию - городить и потом, если есть понимание, что это не нужно то не делать
Anatolii
везде так стараюсь делать
Alexander
ну у меня последнее время сплошной Process
Anatolii
ну и в других языках всмысле
Alexander
или фримонадка над ним
Anatolii
Process - это что?
Alexander
монада
Alexander
в Contol.Distributed.Process
Alexander
которая newtype Process a = P (ReaderT ProcessEnv IO a)
Anatolii
аа
Anatolii
поянтно
Anatolii
я еще не добрался
Anatolii
я в делклраации func не хочу писать что там State
Anatolii
потому что State - только ддля тестов нужен
Anatolii
по сути in-memory база юзеров
Alexander
https://www.schoolofhaskell.com/user/meiersi/the-service-pattern
Anatolii
в приложении все в IO убдет а не в state
Alexander
держи
Alexander
это другой подход
Alexander
в данном случае у тебя ж MyMegaMonad и ничего про стейт нет
Alexander
у тебя может быть MyProductionMonad и MyTestMonad
Alexander
где в одном случае state а в другом общение с базой
Anatolii
это вместо JiraState будет JiraIO какой-то ?
Anatolii
аа
Anatolii
нет
Anatolii
я понял
Anatolii
спасибо
Anatolii
2 вечера пытался загнать эти 2 State в эту функцию:)
Alexander
newtype MyProductionMonad a = MPM { ReaderT JiraLogin (ReaderT RedmineLogin IO) a }
Alexander
например
Anatolii
я понял
Alexander
но посмотри про service oriented
Anatolii
я еще только не понял как мне свою RedmineT сделать
Anatolii
хотел покопать в этом направлении
Alexander
с ними правда не все так гладко может быть, т.к. склейка по IO скорее всего будет
Alexander
зачем RedmineT ?
Anatolii
я проглядел
Anatolii
тут ReaderT Readmine
Anatolii
а зачем это в ридер заворачивать ?
Alexander
ну я для примера
Alexander
если там логин пароль хранить например
Anatolii
ага
Anatolii
ок
Anatolii
а ты пользуешся библиотечкой errors от Гонзалеза?
Evgeniy
Неужели в тестирование хаск внедряешь😊(шутка)
Evgeniy
чтобы протестировать эту логику
Anatolii
да нет, ну просто ты пишешь код
Anatolii
его же надо тестировать
Anatolii
чтобы тестировать надо изолировать внешние зависимости
Anatolii
такие как сервисы
Anatolii
чтобы изолировать надо вот тайп классы делать
Anatolii
ну и так далее
Anatolii
:)
Anatolii
ладно
Anatolii
пойду читать
Evgeniy
👍
Anatolii
@qnikst спасибо за литературу :)
Anatolii
и за то что сказал что моя идея не сработает:)
Alexander
errors - иногда да
Алекс
Как бы вы сделали рекуррентный маппинг? На каждой итерации нужен доступ не только к текущему значению, но и к "аккумулятору". И обычным мапом не делается и редьюсом костыльно выходит.
Denis
Что такое маппинг?