Doge
Но как абстракции тоже полезны
Prunkles
второй вопрос: а в чем суть аппликативного функтора? ну то есть зачем нам это в нашем коде?
Я конечно всё понимаю, но по-моему разговор сначала шёл в сторону, что никто не будет понимать семантику лифта, зачем он нужен, и что да как, потому что не прошли порог вхождения в ФП. А вы тут меня сейчас такое спрашиваете
Shub
Я конечно всё понимаю, но по-моему разговор сначала шёл в сторону, что никто не будет понимать семантику лифта, зачем он нужен, и что да как, потому что не прошли порог вхождения в ФП. А вы тут меня сейчас такое спрашиваете
разговор вообще-то с самого начала шел в сторону того, что лично ты не вполне понимаешь, что ты делаешь. я это говорю не затем, чтобы обидеть, а чтобы помочь разобраться
Shub
семантика лифта понятна любому, кто дал себе за труд прочесть 5 страниц текста буквально
Shub
Уверяю, большая часть людей, которые что-либо делают, не знают, что они делают
"если они спрыгнут с моста - ты тоже спрыгнешь?"
Shub
(если заменить "мост" на "хмурый", то идиома принимает очень курьезный смысл)
Shub
в общем, сократовский метод займет очень долго, я тебе дам сжато, в надежде, что ты пойдешь детали сам уточнять
Shub
короче, лифт впиливают затем, чтобы в коде был аппликативный функтор. прагматизм аппликативного функтора - в крохотном edsl, всякие эти <!> и <*>. прагматизм этого edsl находится под очень большим вопросом - это раз, а так же налагает требования на твои типы, если точнее - требует, чтобы твои типы были категорией, чего в твоем коде не наблюдается
Anonymous
вроде как давно уже понял что такое монада, но давайте еще разок: 1. что такое монада? 2. что такое моноид? 3. что такое функтор? 4. что такое апликативный функтор? надеюсь завтра проснусь и увижу тут ответы.
Shub
ну как. технически они категория, но не потому, что ты их такими спроектировал, а чисто случайно. невозможно создать тип, не являющийся категорией
Vasily
Потереть вопрос, шоле
Vasiliy
Кажется у Jowney опять приступ
Vasily
Таблетки не принял
Shub
@Prunkles в общем, перед тем, как каргокультить эти конструкции, доберись сначала до проблемы. пусть проблема сначала манифестирует себя в твоем коде, а уж потом мы будем дискутировать, стоит ли мутить функтор для нее или может задизайнить вокруг проблемы? по крайней мере, у тебя будет сильный аргумент
Shub
признаки проблемы - это например вложенные матчи по Choice\Option, развесистая валидация кейсов DU и т.п. то есть что-то на что ты смотришь и думаешь - "неее, должен быть способ получше"
Shub
ну ты показывай код с проблемой, а не то, как ты скопировал подход с какого-то гайдлайна
Shub
время щас такое - никому верить нельзя, особенно в интернете
Shub
могут лишить невинности удаленно
Shub
* говорит человек в интернете
я большой любитель парадоксов, да
Anonymous
Ну не, функтор ещё ниже сидит на уровне элементарности
Апликативный функтор вообще нетеоркатное понятие ечли так-то.
Doge
Т.к. если про теоркат, то функтор там все же ощутимо отличается. У нас везде в языках эндофункторы в категории типов данного языка, если уж корректно говорить
Anonymous
Т.к. если про теоркат, то функтор там все же ощутимо отличается. У нас везде в языках эндофункторы в категории типов данного языка, если уж корректно говорить
Спорное и скорее всего некорректное утверждение, но да я суть уловил, в общем-то ты прав: "наши" функторы это действительно тень отца Гамлета.
Doge
Спорное и скорее всего некорректное утверждение, но да я суть уловил, в общем-то ты прав: "наши" функторы это действительно тень отца Гамлета.
Некорректное потому что типы данного языка обычно не могут образовать "хорошую" категорию из-за всяких undefined и других bottom типов
Mikhαil
2. множество + бинарная ассоциативная операция + нулевой элемент
Зочем ты ему отвечаешь если он вопрос как чорт задал
Anonymous
вроде как давно уже понял что такое монада, но давайте еще разок: 1. что такое монада? 2. что такое моноид? 3. что такое функтор? 4. что такое апликативный функтор? надеюсь завтра проснусь и увижу тут ответы.
3. забудь. чтобы понять что такое функтор, надо сначала понять что такое категория и посмотреть на другие примеры гомоморфизмов. например, гомоморфизм направленных графов.
Anonymous
Некорректное потому что типы данного языка обычно не могут образовать "хорошую" категорию из-за всяких undefined и других bottom типов
это я даже во внимание не принимаю, если так ставить вопрос, то никакой инструментарий теорката неприменим.
Doge
Так этих проблем нет
Anonymous
Так этих проблем нет
это уже за гранью моего понимания. Но, например, любой моноид даст тебе полноправную категорию. И без проблем в рамках того же Хасклея ты построишь функтор, который не эндофунктор, а именно фуктор.
Anonymous
Просто это конструирование ради конструирования.
Anonymous
Отличный абстрактный опыт, здорово прочищает мозги, но на пратике нахуй не нужен.
Shub
Так этих проблем нет
пардон, я тут отвлекся. в моей книжке ты числишься как человек с понятиями и с практикой, поправь меня (выше) плз, если думаешь, что я не ухватил суть
Anonymous
Если ты хочешь не эндофункторы, то они аж есть в виде либы в хаскеле, но она никому не нужна
в смысле? тебе будет достаточно instance Functor. оно едва ли из кода как-то по-новому будет, просто вкладываемый смысл будет иной.
Anonymous
Находишь в Хаскле любой instance Monoid и автоматически получаешь специфическую категорию.
Anonymous
Оттуда можно в _Hask_, предполагая, что _Hask_ существует, коненчо.
Anonymous
вот тебе и обычный функтор.
Anonymous
Anonymous
не, я чот уже не понимаю че это такое и как это на теоркат ложится.
Shub
Находишь в Хаскле любой instance Monoid и автоматически получаешь специфическую категорию.
осталось только отразить это на практическую задачу. в примере выше - где в его типах юнит, например? и какая у него ассоциативная операция? в 90% случаев у нас все типы такие. есть категория людей, которые начинают натягивать сову на глобус и вводить какие-то абстракции чисто чтобы "как в хаскеле"
Shub
@DogeShibu https://t.me/fsharp_chat/148352 -- отсюда можно отследить начало, а потом сюда форварднули
Shub
я потерялся в его примерах, если ты сюда скинешь, сможем попробовать разобраться.
у него там моделятся какие-то таски\джобы, он взял за юнит Resolved
Shub
хз по каким соображениям, ну помимо указаний в элмиш бук
Shub
но смысл в том, что instance Monoid гарантирует тебе существование категории. и наоборот.
я в курсе. я просто отмечаю, что мы пишем код для решения объективно существующей проблемы в реальном мире, и в духе ддд в коде не должно быть ничего, не имеющего отражения в реальности. т.е. мы моделируем реальный мир, а не наоборот
Shub
и часто этот мир дан нам в таких ощущениях, что теоркат не может его адекватно смоделировать. что поделать, подавляющее число задач крайне тривиальные
Anonymous
я в курсе. я просто отмечаю, что мы пишем код для решения объективно существующей проблемы в реальном мире, и в духе ддд в коде не должно быть ничего, не имеющего отражения в реальности. т.е. мы моделируем реальный мир, а не наоборот
я ваще не понимаю че он там накодил и че хотел получить, но это парень явно просто тренируется. пусть тренируется, когда-нибудь, я надеюсь, это трансформируется в более крутой скилл. пока что, конечно, еще выглядит неумело и нафиг не нужно. с тобой полностью согласне.
Anonymous
но! он хотя бы что-то делает на пути, это уже радует.
Prunkles
Ок, я нашел, спасибо. @Prunkles А зачем там нужен bind и pure? Чего хочется добиться?
Ну вообще да. pure, return. Вот только оба эти слова уже зарезервированы
Vasily
Аж собакен сагрился
Doge
Т.е. в хаскеле реализация тайпклассов даёт кучу функций за бесплатно. Чего хочется получить тут?
Prunkles
А, не так прочитал
Doge
(но при этом важно, чтобы выполнялись соответствующие законы, т.к. на них опираются эти функции)
Anonymous
и часто этот мир дан нам в таких ощущениях, что теоркат не может его адекватно смоделировать. что поделать, подавляющее число задач крайне тривиальные
а теоркат хрен ложил на реальный мир и в этом прелесть как теорката конкретно, так и чистой математики в общем.
Shub
(но при этом важно, чтобы выполнялись соответствующие законы, т.к. на них опираются эти функции)
ну ему чуть дальше идеешечка серым отметит мертвый код и он может задуматься, что или чего-то не хватает, или что-то лишнее
Prunkles
Вообще, изначально задача была в том, чтобы сделать тривиальным map, который каждый прекрасно понимает и без какого-либо погружения в тк. Но потом я вспомнил, мол, мап можно выразить через байнд и пьюр, а байнд мне тоже может пригодится. Так почему бы не сделать так?
Prunkles
И таким вот образом всё и получилось
Anonymous
А, не так прочитал
Не знаю уместно это или нет, но я на всякий случай тебе проясню: дело далеко не в том, чтобы у тебя был bind и return и даже того факта, что они удовлятворяют особой магической сигнатуре тоже недостаточно. У них еще должна быть "правильная" семантика, которую математики в лучших своих традициях определяют как набор инвариантов - логических утверждений, которые истины в любом "состоянии" системы. Проверить выполнение этих требований погромистом чаще, реже программистом компилятор не может, поскольку это NP-сложная задача. Как следствие, мало найти что-то, что выражается как return и bind, надо еще чтобы они в этом конкретном случае удовлетворяли этим непреложным законам.
Shub
Вообще, изначально задача была в том, чтобы сделать тривиальным map, который каждый прекрасно понимает и без какого-либо погружения в тк. Но потом я вспомнил, мол, мап можно выразить через байнд и пьюр, а байнд мне тоже может пригодится. Так почему бы не сделать так?
на данном этапе это так себе идея. если ты разовьешь свой код до того момента, когда оно тебе потребуется, то ты это легко заимплементишь. дело в том, что код читают не так, как ты его писал, а сверху вниз. поэтому многие куски будут дико загадочными, типа, зачем это все нужно?
Anonymous
Это касается так же и абстракций попроще: например, моноида.