Denis
надо еще какие-нибудь тесты изобразить и рефакторинг
Kirill
streaming для стримов?
Denis
я вот думаю можно ли выразить как-нибудь process через стрим
Denis
да
Kirill
А мне интересно наоборот можно ли :)
Denis
хз, я втупую переписал
Denis
наверное можно как-нибудь омонадить
Alexander
stream через process - можно
Denis
нда, тест-сьют там так себе
Denis
только проверяется по сути, что экспепшены не летят на тупейших примерах
Denis
кстати да, наверное можно
Denis
пулять туда хендлеры с yield внутри внутри монады со стримом
Denis
если получится - можно отдельным пакетом будет
Alexander
Kirill с ContT вроде можно должно быть
Denis
блин, оно в лоб обернулось
Denis
время тупо потратил
Denis
λ> S.print (stream helloXml () :: Stream (Of SaxEvent) IO (Either XenoException ())) Text "\n" OpenTag "greeting" EndOfOpenTag "greeting" Text "Hello, world!" CloseTag "greeting" Right () λ> S.print (streamProcess helloXml () :: Stream (Of SaxEvent) IO (Either XenoException ())) Text "\n" OpenTag "greeting" EndOfOpenTag "greeting" Text "Hello, world!" CloseTag "greeting" Right ()
Denis
вот две версии, одну я руками написал, другая - обёрнутый process
Yura
> А пока поиграйтесь в войну стэка и кабала Зачем? есть же nix
Alexander
@catamorphism обёрнутая чем?
Denis
в общем первая версия, которая заработала - я там сам process переписал
Denis
а вторая вызываю его так, что получается стрим просто
Denis
для консьюмера хочется TH взять
Alexander
а как вызываешь?
Denis
который бы генерил сразу структуры и парсеры, как xml-isogen
Alexander
мне просто интересно как это сделано по человечески
Yura
>Впрочем, с такой зарплатой не важно, наверное. я кажется начинаю догадываться за кибербуллинг
Denis
в хендлеры ему `yield`ов накидал и оно заработало
Denis
streaming норм вообще
Denis
в отличие от ракопауканских аналогов
Denis
мне просто интересно как это сделано по человечески
ну это надо нормальный консьюмер еще сделать
Denis
у меня есть идеи, но я чего-то устал уже
Denis
ну и репа через час
Alexander
я вижу как сделать очень просто producer ценой лишнего треда
Denis
зачем тред?
Leonid 🦇
/me удивляется тем как легко бесить этот чатик разговорами от токсичности и агрессии
Denis
раньше вопросы про IDE были, теперь токсичность
Leonid 🦇
ну ИДЕ хаскелистов не затролить, емаксом отобьются. а тут прямо такое золотое дно
sherzod
уже лучше токсичность чем вопросы по иде
Leonid 🦇
ИДЕизм запретить
Alexander
@catamorphism а как его обернуть верно
Alexander
process же вроде до конца проходит все вызывая колбек
Alexander
а тебе нужно в колбеке дальше слать в стрим
Alexander
если без ContT
Alexander
в свиттере про ide кстати есть
Denis
так если в коллбеке yield, то он приостановит выполнение, пока не попросят следующий ивент
Alexander
https://kotlinlang.org/docs/reference/extensions.html ad-hoc polymorphis in disguise?
Denis
а монада там полиморфная
Alexander
@catamorphism а что у тебя вместо m ?
Denis
c IO только быренько тестил
Alexander
Stream (Of a) b m' r
Alexander
тогда или не туда смотрю или не понимаю
Denis
streamProcess :: forall m r . Monad m => ByteString -> r -> Stream (Of SaxEvent) m (Either XenoException r) streamProcess str r = do process (S.yield . OpenTag) (\a b -> S.yield $ Attr a b) (S.yield . EndOfOpenTag) (S.yield . Text) (S.yield . CloseTag) (S.yield . CDATA) str pure $ pure r
Denis
вот это работает
Denis
или я что-то делаю не так?
Denis
(я до этого много чего не так делал, но тут вроде пашет)
Denis
что за b у тебя в типе?
Alexander
я просто не помню тип :) игнорируй b
Alexander
да, process работает в Stream .. m
Alexander
ок так вижу
Denis
я сначала process весь переписал, пока тут кто-то из вас не сказал что наверняка завернется
Denis
и оно в лоб заворачивается, ёпт
Leonid 🦇
эх, хорошо сейчас удалёнщиками. не надо мёрзнуть на остановках или бежать до метро по льду.
Denis
короче сделаю нормальный консьюмер/парсер и заживем
Denis
изогеном надо консьюмер генерить как раз
Denis
чтобы можно было описать на DSL структуры свои(которые изоморфны подмножеству xml, отсюда название), из них можно сделать data-декларации с хаскелле и парсеры на классах
Denis
надо как-то лапшу в парсерах минимизировать(Cont или на State со структурами параметризованными функторами, чтобы можно было пустыми инициализировать)
Cheese
https://kotlinlang.org/docs/reference/extensions.html ad-hoc polymorphis in disguise?
не совсем > Extensions are resolved statically
Alexander
т.е. тоже самое
Alexander
классы типов резолвятся статически
Alexander
если у нас не existentional
Cheese
Хаскель не обещает статически резолвить классы
Cheese
в Хаскелле инстанс выбирается в рантайме, но может и во время компиляции
Alexander
ты не прав
Alexander
в haskell инстанс не выбирается в рантайме
Alexander
то, что словарь передается параметром это деталь реализации
Cheese
я не говорил про словарь