Alexander
в общем порядок вывода ожидаемый
Alexander
порядок да
Alexander
что может быть неожиданным - скорость
Alexander
сначала появится Result пройдет время и ответ потом
Alexander
вот про это я писал
Alexander
это второй вопрос
Alexander
что кладут в тмвар
Alexander
и.к. у тебя pure x то ты просто кладешь туда х, не вычсляя его
Taras 🦀
рребят, добрый день
посоветуйте куда копать
хочу запилить "hello-world" небольшой сайт на хаскеле,
начать изучать на практике, с пользой
Alexander
Alexander
с вопросами сюда
Alexander
порядок да
так вот ты кладешь не NF значение, а то как его вычислять
IC
изучать хаскель на базе серванта?
Alexander
и.е. грубо говоря pure $ blabla при await ты получишь blabla
Alexander
а не результат blablabla
Alexander
Alexander
ну у меня же pure blabla >>= \x вроде. Все равно?
Alexander
в общем пошел курить DeepSeq :(
Alexander
да он тут поможет
Alexander
>>= - только докажет что контекст ввычислится и эффекты по очереди будут
Alexander
и.е. Just или Nothing например
Alexander
но без deepseq лучшее что ты можешь гарантировать это whnf
Alexander
что для String вообще бесполезно
Murat
Всем привет! Не так давно я увлекся идеей "переменчивой персистентности" отдельных сегментов структур данных. Чтобы все было обобщенно, алгебраически и красиво. Так появился небольшой эксперимент: https://github.com/iokasimov/apart
Что скажете? Если кого-то еще это заинтересует, добавлю тестов и попробую выложить на Hackage.
Cheese
Alexander
Ilya
@kana_sama вроде ты спец по фри монадам, а тут у человека кофри комонады
Murat
Расскажи непосвященным, что это такое - "переменчивая персистентность". Из кода я только понял, что там можно что-то сериализовать и десериализовать, и есть какие-то куски структуры. Имеется в виду, можно сериализовать только часть структуры?
Под этим я подразумевал, что мы можем хранить в памяти какой-нибудь актуальный кусок данных в пямяти, а неактуальные - куда-нибудь записывать. Вот, например, можно взять какое-нибудь бинарное дерево и обрезать его по высоте функцией limit, указав, что делать с данными, которые остались за бортом.
кана
Alexander
Под этим я подразумевал, что мы можем хранить в памяти какой-нибудь актуальный кусок данных в пямяти, а неактуальные - куда-нибудь записывать. Вот, например, можно взять какое-нибудь бинарное дерево и обрезать его по высоте функцией limit, указав, что делать с данными, которые остались за бортом.
Понятненько. Интересная штука, можно придумать, где она была бы полезна.
Подозреваю следующее: сериализуешь ты весь "каркас" структуры, но вместо тех нод, которые не надо записывать в файл, ты вставляешь какие-нибудь заглушки
Murat
Alexander
Философираптор.jpg:
Если фри-монады "не нужны", то кофри комонады - что? "Не ко-нужны"?
Alexander
Зигохистоморфный
@iokasimov Cofree Maybe ~ NonEmpty
Зигохистоморфный
@iokasimov дескрипшн нк прочитал)
Murat
кана
кана
ведь есть 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
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
Зигохистоморфный
:D меня прогонят
Ilya
А если это разные вещи, то с удовольствием послушаю. Не прогонят!
Зигохистоморфный
можно по-подробнее про Mu < Fix ?
Mu это наименьший неподвижный функтор (считай data)
Nu это наибольший неподвижный функтор (считай codata)
В Хаскель из-за лени Mu ~ Fix ~ Nu
Mu и Nu имеют нерекурсивное определение
Fix как некая точка перехода между ними (хиломорфизм, если не хаскель, то это переход от Nu к Mu)
ну если есть еще что-то спросить - велком в директ
Alexander
Не прогонят. Теперь здесь другие порядки.
Зигохистоморфный
лень вообще делает очень много изоморфизмов, где в других языках это срогое различие
Ilya