Влод
в 30ке лучше умеют дебилов занять?
я про общую школу, там же происходит отсев и работают с теми кто собирается учиться
Leonid 🦇
окей
Leonid 🦇
А потом удивляются чего это хаскелисты такие высокомерные. А это еще из физмат школы тянется.
Влод
я ж в ней не учился лул
Leonid 🦇
Я фейл
Leonid 🦇
А так хотелось в пятницу покибербулить
Denis
λ> import Xeno.Streaming λ> helloXml "<?xml version=\"1.1\"?>\n<foo><greeting>Hello, world!</greeting></foo>" λ> let r :: Either ParserException (Hello Maybe) = parseHello helloXml λ> r Right (Hello {unHello = Just "Hello, world!"})
Denis
ы?
Cheese
отвратительно. поле unHello бессмысленное
Denis
далее 1) эксепшены по человечески обрабатывать 2) пилить аналог sax-machine 3) на пакеты разносить как у людей
Denis
это newtype
Denis
а ты отвратительный кибербуллер
Leonid 🦇
Кибербулеан
Denis
кибердуриан
Aliester
киберснойманитъ
Denis
короче есть задача такая
Aliester
Кибербуллировал, кибербуллировал, да так и не выкибербуллировал.
Leonid 🦇
Хибернейт
Denis
рекурсивная структура из рекордов есть, где поля рекурсивно функторами параметризованы до самого низа, где поля кайнда *
Denis
нужно её постепенно заполнять и, видимо, что-то зиппероподобное/курсороподобное иметь
Denis
как у человеков это делается?
Aliester
а вы рептилоид?
Leonid 🦇
Lens, zoom, monadstate
Denis
а вы рептилоид?
не из ваших, сорри
Leonid 🦇
Или нет
Denis
я думал про zoom
Denis
но фиг знает
Denis
еще пакет zipper подсказывали
Alexander
zipper для этого пакетом или руками
Alexander
или билдер генерить
Leonid 🦇
Генерит зиппер темплейт хаскелем?
Denis
а есть примеры где-нибудь?
Влод
как у человеков это делается?
bi/uniplate http://hackage.haskell.org/package/one-liner-0.6/docs/Generics-OneLiner.html
Denis
ну и забыл сказать, важно чтобы БЫСТРО было
Denis
TH и прочие компайл-таймы вполне катят
Denis
но в рантайме надо ВЖУХ
Alexander
ещё конт можно
Leonid 🦇
Тогда STRef
Denis
я не понял как с Cont сделать
Alexander
не знаю, но как-то можно
Alexander
ну в смысле сходу не скажу
Denis
с Cont наверное можно даже без параметризации структур функторами(я использую Maybe для инициализации пустой структуры в стейте)
Alexander
но применение всяких билдеров это ж конт
Denis
я пятой точкой чую что как-то можно, но не понимаю как
Denis
хмхм
A64m
я не понял вопроса
Alexander
есть сложный рекорд
Alexander
есть SAX события
Denis
есть вложенные рекорды, произвольной глубины
Alexander
нужно построить этот рекурсивный рекорд эффективно
Denis
это результат работы sax-парсера
Denis
угу
A64m
никак, эффективно не построить
Denis
я думаю следующее
Denis
беру и вместо обычных рекордов делаю параметризованные функтором
Denis
вначале структура инициализируется с параметром Maybe
Denis
в конце парсинга надо превратить в Identity
Denis
r Maybe -> r Identity в принципе дженериками делается
Denis
но даже так остается проблема с тем как в это зиппер воткнуть
Alexander
это дорого будет
Alexander
фор сам дефинишн
Denis
угу
Alexander
ты ж структуру всю скопируешь
Denis
у меня дефицит хороших идей
A64m
вы на этих манипуляциях с развесистыми иммутабельными рекордами , весь выигрыш от сакс-парсера убьете, зачем тогда вообще с ним мучаться?
Denis
ну хорошая новость в этом такова, что я копирую только подмножество xml
Denis
которое нужно
Denis
а остальное игнорирую
Denis
в этом уже выигрыш относительно dom-парсеров
Leonid 🦇
какой-нибудь шайтан с recursivedo и прочими fix
Anonymous
Тут можно и себе ногу узлом завязать
Alexander
с контами мы должны строить плоский кусок и и принимать продолжением внутренности
Alexander
но сформулировать это кодом я прям сразу не могу, может вечером попробую
Alexander
но не уверен, думаю что забуду
Leonid 🦇
делай тупо STRef внутренностей
Leonid 🦇
или IORef
Leonid 🦇
Вместо Maybe
Denis
STRef в качестве функтора типа
Leonid 🦇
правда значения по умолчанию надо