Size: a a a

2020 October 27

IK

Ilya Kos in Haskell
Leyλa
Да
👍
источник
2020 October 28

K

KLH in Haskell
А кто скажет, что погуглить-почитать по сессионным типам, чтобы вот такую штуку сделать.

Хочется генерить dual сессионные типы к исходному типу (клиенткиий протокол генерить по северному и наоборот). При этому генерить в рантайме, но прочекать генератор в компайл тайм? Я многого хочу и тут уже dependent types нужны? (Сам серверный протокол будет мутировать, поэтому нужно генерить клиентскую часть)
источник

KV

Kirill Valyavin in Haskell
KLH
А кто скажет, что погуглить-почитать по сессионным типам, чтобы вот такую штуку сделать.

Хочется генерить dual сессионные типы к исходному типу (клиенткиий протокол генерить по северному и наоборот). При этому генерить в рантайме, но прочекать генератор в компайл тайм? Я многого хочу и тут уже dependent types нужны? (Сам серверный протокол будет мутировать, поэтому нужно генерить клиентскую часть)
Протокол мутирует в рантайме?
источник

AV

Alexander Vershilov in Haskell
Для "проверки" протокола мутирующего в рантайме нужны зависимые типы
источник

KV

Kirill Valyavin in Haskell
И то если он мутирует по каким-то проверяемым правилам, а не произвольно
источник

AV

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

AV

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

KV

Kirill Valyavin in Haskell
Непонятно, мутирующий протокол — это просто тип, который меняется от вызовов (тогда просто индексированные монады можно использовать), или же этот меняющийся тип сам по себе ещё может меняться
источник

KV

Kirill Valyavin in Haskell
Теоретически, можно представить клиент и сервер как индексированные свободную монаду и косвободную комонаду с пейрингом, и тогда можно одно сгенерировать по другому, неважно в какую сторону. Но это жесть
источник

KV

Kirill Valyavin in Haskell
А если ещё и протокол меняется, то точно типы не помогут
источник

K

KLH in Haskell
Kirill Valyavin
Протокол мутирует в рантайме?
Да, меняется в рантайме. И да, понимаю, что наверное просто сесионными типами не отделаешься
источник

KV

Kirill Valyavin in Haskell
Вообще ИРЛ делют как-то так, но там ничё не меняется в рантайме
https://skillsmatter.com/skillscasts/14633-45-minute-talk-by-duncan-coutts
источник

K

KLH in Haskell
Клиент и сервер могут быть некоторыми интерпретаторами. И хотелось бы строить некий ast  для них непротиворечивый и менять его непротиворечиво в рантайме. Тут gadt может пригодится наверное
источник

K

KLH in Haskell
Спасибо, чекну
источник

KV

Kirill Valyavin in Haskell
KLH
Клиент и сервер могут быть некоторыми интерпретаторами. И хотелось бы строить некий ast  для них непротиворечивый и менять его непротиворечиво в рантайме. Тут gadt может пригодится наверное
А как оно меняется в рантайме вообще? С примером проще будет
источник

AV

Alexander Vershilov in Haskell
Это про STM доклад?
источник

KV

Kirill Valyavin in Haskell
Alexander Vershilov
Это про STM доклад?
Нет
источник

AV

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

K

KLH in Haskell
Kirill Valyavin
А как оно меняется в рантайме вообще? С примером проще будет
Грубо говоря, tcp сервер и клиент на полностью своем стеке. И вот нужно немного "взаимно нарушать" принятые правила tcp-ip-"общения")
источник

KV

Kirill Valyavin in Haskell
KLH
Грубо говоря, tcp сервер и клиент на полностью своем стеке. И вот нужно немного "взаимно нарушать" принятые правила tcp-ip-"общения")
Ничё не понятно. Но в общем если у Вас просто стейт-машина на уровне типов, где при каждом текущем стейте определён набор доступных вызовов, то это просто сессионные типы, а если эта стейт-машина ещё и меняется в зависимости от рантайм-значений, то это сессионные + зависимые типы, ну и есть шанс, что хаскеля хватит для этого
источник