2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Mонады в javascript
Сообщение06.06.2015, 21:23 


06/06/15

12
На одном форуме для умных дядек вычитал любопытное сообщение
Цитата:

My friend told me recently that he invented monads in Javascript:
Код:
      result = monadicObj
             .action1(arg)
             .action2(arg2);


I told him that he needs variable binding operations for fully fledged monads:
Код:
      result = monadicObj
             . x <- action(arg)
             . y <- action2(x,arg2)
             . action3(x,y,arg3)
             . return (x+y);


Otherwise, his invention is much more like Applicative, because we cannot pass values between actions.

So here it is: monads are just objects...


https://news.ycombinator.com/item?id=1997341

Если это правда, то в JS монады не нужно имплементировать, они фактически, есть искаропки

Код:


sum=function(x, y){return x+y},
mul=function(x, y){return x*y}

MonadicObject=function(){
self=this
}

with(new MonadicObject){
self.x=sum(1, 2)
self.y=mul(x, 2)
self.z=sum(x, y)
obj=self.z
}

obj //  9



что скажете? Действительно это монады?

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение06.06.2015, 22:13 
Заслуженный участник


27/04/09
28128
Э-э-э… :roll: Нет, один человек вот комонады объектами называл (но потом вроде как передумал). Но монады… это будет слишком узко, да и не понял, где в вашем примере монады. Просто присваивание атрибутов на основе значений других. Может, каким-то боком за монаду — единичный функтор и сойдёт, но это, понятно, несмешная шутка. :lol: Да и вообще не шутка — в коде ни одного bind/join и return.

Тип $m\,a$, являющийся монадой — это «тип значений $a$ в контексте» (определяемом $m$ и реализацией методов, которые позволяют «оборачивать» композиции функций, чтобы они «учитывали» контекст). Например, значение, которое может отсутствовать. Или потенциальное множество значений. Или распределение вероятностей. Или значение, в котором может читаться/записываться какое-то состояние. Соль в примере кода должна быть в этом. И в (см. ниже) красивом синтаксисе, который, лично я считаю, нельзя не учитывать.

В JS динамическая типизация накладывает неудобные ограничения. Там, где в других случаях сработал бы вывод типов, тут всю соответствующую информацию придётся писать руками. Хотя в этом случае, вроде, ещё всё спокойно.

Мало того что нужно знать, что есть толк рассматривать как монады, а что нет, так ещё и синтаксис желательно иметь подобный do-нотации хаскеля. От него вещи смотрятся естественнее, а ещё он напоминает списочные выражения (list comprehensions), и в исполнении монады-списка они даже совпадают, что говорит о том, что какие-то идеи тут угаданы очень хорошо. Можно ли в JS сделать так красиво без кучи улыбающихся скобочек в конце выражения — хмм.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение06.06.2015, 22:20 


06/06/15

12
arseniiv в сообщении #1024148 писал(а):
комонады объектами называл (но потом вроде как передумал). Но монады


Монады, насколько я понял -- это инстансы объектов, через которые протаскивается контекст вычисления. Это если плясать от изначального примера. Это все в примере есть. Все остальное -- это уже отдельно. А суть монад банальна до безобразия. Просто поразительно, что вокруг них так мнго шума поднимается.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение06.06.2015, 22:28 
Заслуженный участник


27/04/09
28128
pborets в сообщении #1024155 писал(а):
инстансы объектов
Что-то здесь не так.

pborets в сообщении #1024155 писал(а):
Это все в примере есть. Все остальное -- это уже отдельно.
Нет уж, «всё остальное» — это как раз кирпичики, делающие монадический код универсальным. Можно было бы не говорить ни о каких монадах и использовать специализированные bind и return, не называя их такими словами. Но если говорить «монада», надо иметь возможность написать код, который будет делать что-то осмысленное для любой монады.

pborets в сообщении #1024155 писал(а):
А суть монад банальна до безобразия. Просто поразительно, что вокруг них так мнго шума поднимается.
Монады, действительно, не что-то страшное и сложное, как и эндофункторы и т. п.. Шум вокруг них поднимается, наверно, в основном, среди начинающих знакомство, когда они известны, а другие более общие или подобные вещи — ещё не совсем.

-- Вс июн 07, 2015 00:30:54 --

(Оффтоп)

Вообще, я сначала написал пространное объяснение монад, но зачем-то удалил. Видимо, зря.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение06.06.2015, 22:35 


06/06/15

12
arseniiv в сообщении #1024161 писал(а):
Но если говорить «монада», надо иметь возможность написать код, который будет делать что-то осмысленное для любой монады.


С чего Вы взяли, что для моего примера этого сделать нельзя.
arseniiv в сообщении #1024161 писал(а):
Шум вокруг них поднимается, наверно, в основном, среди начинающих знакомство, когда они известны,


Судя по тому, что пишется в сети, шум поднимается всегда. Никто из "гуру" не может или не желает объяснить их простыми словами. Иногда говорится, что когда ктото понял монады, он испытывает затруднения с тем, чтобы объяснить их кому-то другому. Это выглядит подозрительно. На мой взгляд (если я правильно понял то, что понял) это сделать весьма легко.

-- 06.06.2015, 23:47 --

arseniiv в сообщении #1024161 писал(а):
Что-то здесь не так.

Это не случайная оговорка, кстати. В правильных языках класс -- это объект.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение06.06.2015, 22:54 
Заслуженный участник


27/04/09
28128
pborets в сообщении #1024166 писал(а):
С чего Вы взяли, что для моего примера этого сделать нельзя.
Это терминологический вопрос. Переформулированный пример будет уместнее назвать другим примером, на мой вкус.

pborets в сообщении #1024166 писал(а):
Никто из "гуру" не может или не желает объяснить их простыми словами. Иногда говорится, что когда ктото понял монады, он испытывает затруднения с тем, чтобы объяснить их кому-то другому. Это выглядит подозрительно.
Такова уж цена полного понимания абстрактных вещей. Попробуйте объяснить в подобной ситуации, хотя бы, чем обосновано представление топологии множеством всех открытых подмножеств пространства. Потому что мало описать, что такое — тут всё просто: функтор да морфизмы, парочка соотношений — надо ещё обосновать и привести столько примеров, сколько превратятся в голове в интуицию. Это настолько универсально, что выглядит как-то плоско.

pborets в сообщении #1024166 писал(а):
На мой взгляд (если я правильно понял то, что понял) это сделать весьма легко.
Прошу вас. :wink: Ошибки, если найдутся, будут скорректированы (кем-нибудь).

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение06.06.2015, 22:57 


06/06/15

12
arseniiv в сообщении #1024186 писал(а):
Прошу вас

Так я уже объяснил. Это протаскивание вычислений через инстанс. Своего рода, костыль для состояния, которое в данном случае, заметено под ковер. Все.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение06.06.2015, 23:03 
Заслуженный участник


27/04/09
28128
Не, тогда неправильно.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение06.06.2015, 23:06 


06/06/15

12
arseniiv в сообщении #1024194 писал(а):
Не, тогда неправильно.


Я плясал от примера, который приведен в начале топика. На Y-combinator вроде, случайные люди не ходят. Исходя из этого примера -- все правильно. В чем неправильность, по-вашему?

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение07.06.2015, 01:47 
Заслуженный участник


27/04/09
28128
Если это объяснение предполагается сочетать вместе с примерами, определением монады и т. п., то, может, оно и сойдёт, но само по себе оно достаточно туманно и немного даже не то описывает, что в результате ясности не приносит. Если бы я не знал сейчас, я бы честно вот не понял.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение08.06.2015, 17:23 


05/09/12
2587
arseniiv в сообщении #1024161 писал(а):
Вообще, я сначала написал пространное объяснение монад, но зачем-то удалил. Видимо, зря.
Зря. Форум читают не только участники диалога, некоторым читателям было бы небезынтересно.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение08.06.2015, 18:37 
Заслуженный участник


27/04/09
28128
Просто оно было ещё и не очень-то аккуратным и последовательным. Если вдруг напишется новое получше — постараюсь не удалять. :-)

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение09.06.2015, 06:54 


11/12/14
893
Вот тут более конкретно с объектами и "сцепкой": http://www.stephanboyer.com/post/83/monads-for-dummies
Похоже на правду. Сам я изучение хаскеля правда забросил как раз на введении в монады.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение09.06.2015, 11:18 


11/12/14
893
P.S.

Хотя по ходу да, монады возникли в хаскелле и главным образом там и нужны. Покопал еще немного на тему того как наиболее удачно выразить в языке с императивными замашками - прихожу к выводу что просто не нужны. Не надо. Другие абстрации решают, без чистого ФП просто смысла нет, как и без Хаскельных типов и синтаксиса.
Даже в лиспе какие то макросы строгают, но походу они никому там не нужны.

 Профиль  
                  
 
 Re: Mонады в javascript
Сообщение09.06.2015, 23:15 
Заслуженный участник


27/04/09
28128
aa_dav в сообщении #1025203 писал(а):
Хотя по ходу да, монады возникли в хаскелле и главным образом там и нужны.
И теория категорий их заимствовала? Я истории точно не помню, но если они возникли сначала не в теории категорий, удивлюсь.

aa_dav в сообщении #1025203 писал(а):
Покопал еще немного на тему того как наиболее удачно выразить в языке с императивными замашками - прихожу к выводу что просто не нужны. Не надо.
Ну прям вы все случаи перебрали.

-- Ср июн 10, 2015 01:27:57 --

aa_dav в сообщении #1025153 писал(а):
Вот тут более конкретно с объектами и "сцепкой": http://www.stephanboyer.com/post/83/monads-for-dummies
Похоже на правду.
О, вот тут смысл есть (вроде, даже читал когда-то). В частности, выделенное курсивом
Stephan Boyer писал(а):
The power of monads is that they allow you to change the rules for how functions are composed.
могло бы прояснять ситуацию окончательно, если бы такое простое прояснение было возможно. Жалко только, примеров маловато.

aa_dav в сообщении #1025153 писал(а):
Сам я изучение хаскеля правда забросил как раз на введении в монады.
Т. е. функторы успели? (Шучу-шучу.)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу 1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group