Size: a a a

2021 July 10

AH

Ayrat Hudaygulov in F# Chat
Во, уже все написали
источник

P

Pavel in F# Chat
Я когда-то разбирался с суаве (и даже понял), насколько помню если хандлер вернул Some значит всё, реквест обработан, иначе идёт следующий
источник

P

Pavel in F# Chat
Всё просто, замутки в жирафе с next ради перфоманса
источник

PD

Prunkles Dreemurr in F# Chat
А, тогда, получается, в суаве нет жирафовского skip? И его наличие как раз позволяет в перф?
источник

SB

S B in F# Chat
Это джоин
источник

P

Pavel in F# Chat
Не понял что skip в жирафе делает
источник

PD

Prunkles Dreemurr in F# Chat
источник

PD

Prunkles Dreemurr in F# Chat
Как я понял, он используется во всяких choose, а также, если прокинется на самый верх, позволяет скипнуть обработку жираф хендлерами, и отдать обработку аспу, в остальные миддлвари
источник

P

Pavel in F# Chat
Как я понял, у суайва более простая идея - хандлер вернул Some - всё реквест обработан. Иначе следующий хандлер в пайплайне. В жирафе идея та же, но ради перфа чуть сложнее, передают next в частности
источник

P

Pavel in F# Chat
Может в жирафе больше наворотов (глубоко в детали не вникал) но схема построения обработки в суайве видится покрывающей все нужное
источник

PD

Prunkles Dreemurr in F# Chat
Понял. Спасибо за разъяснения
источник

PD

Prunkles Dreemurr in F# Chat
https://github.com/giraffe-fsharp/Giraffe/issues/69
https://github.com/giraffe-fsharp/Giraffe/pull/71
Кажется именно начиная с этого момента они переключились на текущий вариант. Раньше было
type HttpHandlerResult = Async<HttpContext option>
type HttpHandler = HttpContext -> HttpHandlerResult
, прямо как в суаве
источник

K

Kir in F# Chat
Прошу написать такую для type ('a, 'b) Const = Const of 'a, для переменной 'b :trollface:
источник

K

Kir in F# Chat
На самом деле, у монад нет общей для всех монад распаковки вида unwrap : 'a M -> 'a, а есть распаковка "в следующую коробку", в форме

andThen : 'a M -> ('a -> 'b M) -> 'b M,

Которую как раз можно написать и для списка (flatMap) и для Const (просто выкинуть продолжение).

Зато есть общая у-паковка pure : 'a -> 'a M. Распаковка есть у комонад, но там вообще всё с точностью до наоборот.
источник

P

Pavel in F# Chat
https://dusted.codes/functional-aspnet-core
В блоге как раз описано как от суайв хандлера шли к жирафному
источник

SB

S B in F# Chat
Ты же понимаешь что из этой ситуации тривиальный выход? b -> Const a -> b
источник

SB

S B in F# Chat
Просто этот выход в общем случае не будет удовлетворять никаким ограничениям и не является частью определения. Но тем не менее, если дополнительные ограничения не заявлены, то это вполне выход.
источник

K

Kir in F# Chat
Общего, forall M.-выхода из монад не существует
источник

SB

S B in F# Chat
Почему?
источник

K

Kir in F# Chat
Потому что если потребовать от монады метода extract : 'a M -> 'a, то большинство монад отвалятся или будут кидаться ошибками.

Попробуй вынуть 'b из ('a, b') Const или из 'a -> 'b (монады по 'b) функцией именно этой ('a M -> 'a) сигнатуры.

Да, из каждой монады по отдельности можно что-то вынуть или как-то использовать, но обобщённого способа нет.
источник