Alexander
в общем порядок вывода ожидаемый
Alexander
порядок да
Alexander
что может быть неожиданным - скорость
Alexander
сначала появится Result пройдет время и ответ потом
Alexander
вот про это я писал
Alexander
это второй вопрос
Alexander
что кладут в тмвар
Alexander
и.к. у тебя pure x то ты просто кладешь туда х, не вычсляя его
Taras 🦀
рребят, добрый день посоветуйте куда копать хочу запилить "hello-world" небольшой сайт на хаскеле, начать изучать на практике, с пользой
Alexander
с вопросами сюда
Alexander
порядок да
так вот ты кладешь не NF значение, а то как его вычислять
IC
изучать хаскель на базе серванта?
Alexander
и.е. грубо говоря pure $ blabla при await ты получишь blabla
Alexander
а не результат blablabla
Alexander
ну у меня же pure blabla >>= \x вроде. Все равно?
Alexander
в общем пошел курить DeepSeq :(
Alexander
да он тут поможет
Alexander
>>= - только докажет что контекст ввычислится и эффекты по очереди будут
Alexander
и.е. Just или Nothing например
Alexander
но без deepseq лучшее что ты можешь гарантировать это whnf
Alexander
что для String вообще бесполезно
Murat
Всем привет! Не так давно я увлекся идеей "переменчивой персистентности" отдельных сегментов структур данных. Чтобы все было обобщенно, алгебраически и красиво. Так появился небольшой эксперимент: https://github.com/iokasimov/apart Что скажете? Если кого-то еще это заинтересует, добавлю тестов и попробую выложить на Hackage.
Alexander
Всем привет! Не так давно я увлекся идеей "переменчивой персистентности" отдельных сегментов структур данных. Чтобы все было обобщенно, алгебраически и красиво. Так появился небольшой эксперимент: https://github.com/iokasimov/apart Что скажете? Если кого-то еще это заинтересует, добавлю тестов и попробую выложить на Hackage.
Расскажи непосвященным, что это такое - "переменчивая персистентность". Из кода я только понял, что там можно что-то сериализовать и десериализовать, и есть какие-то куски структуры. Имеется в виду, можно сериализовать только часть структуры?
Ilya
@kana_sama вроде ты спец по фри монадам, а тут у человека кофри комонады
Murat
Расскажи непосвященным, что это такое - "переменчивая персистентность". Из кода я только понял, что там можно что-то сериализовать и десериализовать, и есть какие-то куски структуры. Имеется в виду, можно сериализовать только часть структуры?
Под этим я подразумевал, что мы можем хранить в памяти какой-нибудь актуальный кусок данных в пямяти, а неактуальные - куда-нибудь записывать. Вот, например, можно взять какое-нибудь бинарное дерево и обрезать его по высоте функцией limit, указав, что делать с данными, которые остались за бортом.
Alexander
Под этим я подразумевал, что мы можем хранить в памяти какой-нибудь актуальный кусок данных в пямяти, а неактуальные - куда-нибудь записывать. Вот, например, можно взять какое-нибудь бинарное дерево и обрезать его по высоте функцией limit, указав, что делать с данными, которые остались за бортом.
Понятненько. Интересная штука, можно придумать, где она была бы полезна. Подозреваю следующее: сериализуешь ты весь "каркас" структуры, но вместо тех нод, которые не надо записывать в файл, ты вставляешь какие-нибудь заглушки
Murat
Понятненько. Интересная штука, можно придумать, где она была бы полезна. Подозреваю следующее: сериализуешь ты весь "каркас" структуры, но вместо тех нод, которые не надо записывать в файл, ты вставляешь какие-нибудь заглушки
Здесь поведение функций limit, recover и fluent похоже на bitraverse на самом деле. В нашем случае, в структуре Cofree t a, сегмент это t (Cofree t a) - вот с ним мы и можем что-нибудь сделать, а сами значения не трогаем.
Alexander
Философираптор.jpg: Если фри-монады "не нужны", то кофри комонады - что? "Не ко-нужны"?
Зигохистоморфный
@iokasimov Cofree Maybe ~ NonEmpty
Зигохистоморфный
@iokasimov дескрипшн нк прочитал)
Murat
@iokasimov дескрипшн нк прочитал)
Не уверен, что понял тебя...
кана
@iokasimov Cofree Maybe ~ NonEmpty
таки вполне себе List
кана
ведь есть Nothing
Зигохистоморфный
ведь есть Nothing
ты видел как кофри устроен? это не тип суммы
кана
мы говорим не про Cofree
кана
а про Cofree Maybe
Зигохистоморфный
Cofree Maybe a
кана
|Cofree Maybe a| = |List a|
IC
Nothing там на конце будет - чтобы показать остановку, не?
Зигохистоморфный
нет, не будет кофри изоморфен листу
IC
значит в начале всегда будет хотя бы что-то - зерно кофри
кана
а, хм, ну окей
кана
да, в самое начало не засунуть ничего
кана
я почему-то прочитал Nonempty как стрим
IC
ну стримить то ты можешь сколько угодно
Зигохистоморфный
IC
@xgrommx и всё же.. как работают конструкторы Maybe в связке с Cofree?
IC
то есть я правильно угадал, что Nothing для оставновки?
IC
нет следующего "продукта" для коиндукции - стоп. есть - едем дальше.
кана
ну да, ведь функтор для Maybe не будет ничего делать для Nothing
кана
интересно
кана
а примерчик с деревом есть под гитом?
ну наверное вот такое + то, что в ридми для стека
Ilya
ну наверное вот такое + то, что в ридми для стека
Что-то дико похоже на определение через Fix (я про комонады и кофри ничего не знаю)
Murat
а примерчик с деревом есть под гитом?
Тут определены бинарное, префиксное и обычное: https://github.com/iokasimov/apart/tree/master/Data/Apart/Structures/Tree. Хочу еще попробовать написать пальчиковое, АВЛ, B. Думаю, получится.
Ilya
BTW, ловите нейминг для хаскель-коворкинга: Coffree
Зигохистоморфный
кофри вроде для розовых деревьев
кана
кофри это фикс с дополнительным значением Чтобы сделать дополнительное значение бесполезным, нужно взять такой тип, где значение имеет 0 информации - unit. Поэтому если как значание выбрать (), то мы можем отбросить "с дополнительным значением" и получим просто фикс: Fix f ~ Cofree f ()
Зигохистоморфный
Free f Void ~ Fix f
Зигохистоморфный
Cofree f Unit ~ Fix f
кана
~ Cofree f ()
Зигохистоморфный
Free < Mu < Fix < Cofree < Nu
Зигохистоморфный
free2fix :: Functor f => Free f Void -> Fix f free2fix (Pure v) = absurd v free2fix (Free v) = Fix (free2fix <$> v)
Ilya
Free < Mu < Fix < Cofree < Nu
можно по-подробнее про Mu < Fix ?
Зигохистоморфный
:D меня прогонят
Ilya
можно по-подробнее про Mu < Fix ?
Просто в тех статьях, с которыми я разбирался с Fix, его приравнивали к Mu
Ilya
А если это разные вещи, то с удовольствием послушаю. Не прогонят!
Зигохистоморфный
можно по-подробнее про Mu < Fix ?
Mu это наименьший неподвижный функтор (считай data) Nu это наибольший неподвижный функтор (считай codata) В Хаскель из-за лени Mu ~ Fix ~ Nu Mu и Nu имеют нерекурсивное определение Fix как некая точка перехода между ними (хиломорфизм, если не хаскель, то это переход от Nu к Mu) ну если есть еще что-то спросить - велком в директ
Alexander
Не прогонят. Теперь здесь другие порядки.
Зигохистоморфный
лень вообще делает очень много изоморфизмов, где в других языках это срогое различие