Size: a a a

2020 November 19

AV

Alexander Vershilov in Haskell
В какой-то момент потребуется indexed monad, т.к. надо хранить больше информации
источник

AV

Alexander Vershilov in Haskell
Но в целом это можно, какой механизм использовать внутри, уже отдельных вопрос, но в целом Capabiltiy, mtl (нормальный), Effects, HFM (пусть тоже будет вещью) именно об этом
источник

AV

Alexander Vershilov in Haskell
Везде можно вводить мини-язык, который может трекаться в типах, и на основе этого доказывать что-то простое
источник

AV

Alexander Vershilov in Haskell
Приствие операций из какого-то домена (вон выше RO/RW) совсем просто, что-то вроде того, к каким файлам обращаться - сложнее и могут потребоваться сложные структуры
источник

AV

Alexander Vershilov in Haskell
Например, если хочется написать код, который гарантировано не будет обращаться к файлам, кроме тех, что переданы агрументом
источник

AV

Alexander Vershilov in Haskell
Это уже будет какое-то indexed arrows, хотя возможно и стрелками справиться можно.
источник

AV

Alexander Vershilov in Haskell
Самый простой подход у нас, кстати использовался в библиотеке для базы, он на тапах понимал тип транзации ro или rw, учитывая, что база умела параллельно пускать  только одну rw транзакцию это было важно
источник

V0

Vlad 0xd728c4a7cd55d... in Haskell
Алексей ayaye :)
я имею ввиду, что если все эффекты бы детально описывались, тогда можно было бы что-то подоказывать
именно! и выше Александр очень прав про метрики и логи, что на условную системную чистоту не влияют, т.е. я хочу различать эффекты. где это есть? фреймворк? хоть кто-то еще про это парится?
источник

AV

Alexander Vershilov in Haskell
freer, capability, разные системы эффектов, типа fused-effect
источник

AV

Alexander Vershilov in Haskell
Если именно отличать типы эффектов
источник

А

Алексей ayaye :)... in Haskell
Vlad 0xd728c4a7cd55d8db
именно! и выше Александр очень прав про метрики и логи, что на условную системную чистоту не влияют, т.е. я хочу различать эффекты. где это есть? фреймворк? хоть кто-то еще про это парится?
ну он и направление задал. я думаю, в пределе это делают не средствами haskell, а уже по-другому доказывают
источник

AV

Alexander Vershilov in Haskell
Есть интересные статьи по labeled IO, они хоть и про систему прав, но позволили бы выразить и эффекты
источник

AV

Alexander Vershilov in Haskell
Реализации разумной на hackage не помню
источник

V0

Vlad 0xd728c4a7cd55d... in Haskell
Alexander Vershilov
freer, capability, разные системы эффектов, типа fused-effect
А есть где-нибудь что-то типа realworldapp. (твиттера-на-коленке) как прикладного примера?
источник

AV

Alexander Vershilov in Haskell
https://hackage.haskell.org/package/lio - кажется я не смог этой либой пользоваться
источник

AV

Alexander Vershilov in Haskell
http://www.scs.stanford.edu/~dm/home/papers/stefan:lio.pdf - а статья читабельна
источник

AV

Alexander Vershilov in Haskell
Vlad 0xd728c4a7cd55d8db
А есть где-нибудь что-то типа realworldapp. (твиттера-на-коленке) как прикладного примера?
Не видел, но я особо и не искал, надо подождать когда любители эффектов проснутся, может что накидают
источник

AV

Alexander Vershilov in Haskell
А ещё кстати с гетами есть проблемы со всякими заполнениями кешей и т.п. которые с одной стороны эффект, с другой его нужно разрешать
источник

AV

Alexander Vershilov in Haskell
Т.е. как может работать get:
1. сделать запрос в сервис авторизации (недетерминированный эффект)
2. подтянуть данные из базы (недетерминированный эффект)
3. положить данные в локальный кеш (недетерминированный эффект ещё и с записью)
4. выдать метрики и логи (эффект, но можно игнорировать)
источник

AV

Alexander Vershilov in Haskell
При том, что обращения к базе и сервисам (авторизации например) будет использовать локальное состояние для поддержки backpressure (мониторинга ошибок и восстановления, треккинга важности запроса)
источник