LINUX.ORG.RU

[монады] абстракция или костыль?


0

0

Здравствуйте.

У меня возник вопрос относительно темы топика. Есть ли смысл применения монад в языках, поддерживающих фп, и в чём тут выгода? И соответственно, в чём тогда заключается практический смысл их законов и преобразований, или же это только вписывание состояния с типом и аппликативного порядка вычислений в один язык для красивого соответствия теории?

Ответ на: комментарий от jtootf

>монада - это моноид в категории эндоморфизмов. и ничего более

и что этот *морфизм из категории делает полезного, по сравнению с используемыми приёмами в программировании? вроде же об этом с самого начала спрашивал. Например, зачем нужны циклы в структурном программировании понятно, зачем нужны системы объектов тоже понятно, зачем нужны замыкания тоже ясно, зачем нужны треды тоже, зачем нужны исключения - ясно, зачем продолжения - ясно, зачем рекурсия - ясно, зачем макросы - ясно и т.д.

А зачем монады-то нужны? Вроде и любителей хаскелла сейчас много, а про монады( как абстракцию для программирования, а не догму-идиому языка или чистую теорию) никто толком ничего сказать не может.

login738246
() автор топика
Ответ на: комментарий от login738246

> Вроде и любителей хаскелла сейчас много, а про монады( как абстракцию для программирования, а не догму-идиому языка или чистую теорию) никто толком ничего сказать не может.

вот здесь и кроется отличие кодера от программиста.

isden ★★★★★
()
Ответ на: комментарий от login738246

ясно

ну если тебе всё и так ясно, зачем ты сюда пришёл? перечисленные тобой асбтракции в массе своей заметно сложней монад

никто толком ничего сказать не может

http://nponeccop.livejournal.com/156763.html

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>ну если тебе всё и так ясно, зачем ты сюда пришёл

эээ, ну даже и не знаю что тут сказать. вы все такие?

http://nponeccop.livejournal.com/156763.html

там тоже нет ответа на вопрос. ссылка на кучу книг ответом не является.

login738246
() автор топика
Ответ на: комментарий от login738246

>А зачем монады-то нужны?
Вообще, я всегда считал что монады - это функторы. Конечно их можно считать моноидами... в том плане что много чего можно считать моноидами... Но адвокаты монад в хаскеле их рассматривают как функторы.

Твой вопрос не имеет смысла. А зачем нужна математика?

Если тебя сабж интересует непосредственно к программированию, почитай публикации Moggi et al. А дальше по ссылкам.

Macil ★★★★★
()
Ответ на: комментарий от Macil

>Если тебя сабж интересует непосредственно к программированию, почитай публикации Moggi et al. А дальше по ссылкам.

да, ещё раз, написал же об этом.

А зачем нужна математика?

Абстракция, которая используется( не вся) во многих( везде) областях. Примеров куча, в отличии от монад в программировании.

почитай

А почему же никто не может сказать сам, что полезного в этом, раз это так нравиться и, наверное, постоянно и успешно используется для чего-то? Например, про циклы можно многое сказать в нескольких предложениях( ес-но сейчас это не актуально).

login738246
() автор топика
Ответ на: комментарий от login738246

> А почему же никто не может сказать сам, что полезного в этом

А ты хотел, чтобы хаскеляторы сказали «ну все остальные способы натянуть В/В на чистый ФП-язык были еще угребищнее»? :)

tailgunner ★★★★★
()
Ответ на: комментарий от login738246

> почему же никто не может сказать сам, что полезного в этом

Потому что пока ты сам не поймёшь, пользы от определения тебе никакой не будет. И конкретные примеры монад тебе ничего не дадут - слишком абстрактны монады для этого. Хочешь в этом разобраться - почитай, к примеру, typeclassopedia - там ясным языком порядку расписано, что, куда и зачем. Не хочешь - тогда прекрати обсуждать непонятные тебе вещи и выставлять своё незнание напоказ. Про язык Blub слышал когда-нибудь?

нравиться

А это я даже комментировать не буду

anonymous
()
Ответ на: комментарий от login738246

про циклы можно многое сказать в нескольких предложениях

ну так скажи, подай пример

почему же никто не может сказать сам, что полезного в этом

потому что все под таким впечатлением от твоей толстоты, что потеряли дар речи

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>ну так скажи, подай пример

зачем? это всем очевидно, в отличии от монад. ну, может завтра вечером и напишу, если тут совсем туго будет...

потому что все под таким впечатлением от твоей толстоты, что потеряли дар речи

какая ещё толстота? про монады вообще почти никто не слышал, даже о связи с программированием не подозревают.

login738246
() автор топика
Ответ на: комментарий от anonymous

>Не хочешь - тогда прекрати обсуждать непонятные тебе вещи и выставлять своё незнание напоказ.

я почти ничего про монады не констатировал. в топике про них весьма нелестные отзывы, но не мои.

Про язык Blub слышал когда-нибудь

нет, но ведь это к же к теме не относиться.

login738246
() автор топика
Ответ на: комментарий от anonymous

>Про язык Blub слышал когда-нибудь?

И ещё, не все фичи совместимы. Пример: C++. Те. не все концепции можно совместить, и среди них есть плохие и/или не универсальные. Другая концепция не обязательна будет более удобной и абстрактной. Пример: никто так и не сказал ничего толком о монадах и их реальной пользе.

login738246
() автор топика
Ответ на: комментарий от login738246

зачем? это всем очевидно, в отличии от монад

когда кто-то говорит «всем очевидно», это, как правило, означает «я не знаю». очевидную всем композицию ты уже объяснил каким-то диким образом; я всё же настаиваю на объяснении цикла

какая ещё толстота?

феерическая. прозреваю лиспотролля, но доказать не могу

про монады вообще почти никто не слышал

тогда откуда вопрос?

о связи с программированием не подозревают

для того, чтобы эту связь заподозрить, достаточно вбить «монада» в гугле. а пройдя по ссылке, можно почитать много примеров использования

и походу ты не тролль, да?

jtootf ★★★★★
()
Ответ на: комментарий от login738246

Пример: никто так и не сказал ничего толком о монадах и их реальной пользе

в своё время в толксах был чудный топик, автор которого написал «prolog - говно», а потом обижался, что его не переубеждают в обратном. хочешь получить адекватный ответ - задавай адекватный вопрос. а то «костыль», «морфизмы для хелловорлда»

не все концепции можно совместить, и среди них есть плохие и/или не универсальные

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

jtootf ★★★★★
()
Ответ на: комментарий от login738246

Реальная польза монад в том, что они позволяют спрятать «под коврик» ненужные детали реализации и сократить объем кода.

eugine_kosenko ★★★
()
Ответ на: комментарий от jtootf

Не, это не лиспотролль, у лисперов, в основном, претензии к статической типизации.

eugine_kosenko ★★★
()
Ответ на: комментарий от login738246

>А почему же никто не может сказать сам

Ага, в пару абзацев волжить лет этак 20 научной мысли... Вообще, я себе никогда не ставил вопрос «ЗАЧЕМ» Сказать к слову, я долгое время в виду карйне дерьмового математического образования в школе и вузе при изучении математики стаивл этот вопрос. Нужно ставить вопрос «КАК».

Монады используются для моделирования вычислений. Тебе от этого легче стало? Лично для меня монады - средство *неявного* управления потоком *вычислений*. Но ведь для меня же. Кто-то может быть монады рассматривает как некий контейнер, внутри которого, как в аналоге проргаммного модуля, можно прятать детали реализации. Может кто-то рассматривает моналы, как способ формаирования цепочки комбинаторов со всемы вытекающими.

Так что читай классиков. Благо в цифровую эпоху они доступны.

Macil ★★★★★
()
Ответ на: комментарий от Macil

> Вообще, я себе никогда не ставил вопрос «ЗАЧЕМ» Сказать к слову, я долгое время в виду карйне дерьмового математического образования в школе и вузе при изучении математики стаивл этот вопрос.

Так ты определись - девочка или мальчик.

И да, математика без «зачем» теряет свой смысл.

LamerOk ★★★★★
()
Ответ на: комментарий от jtootf

> http://nponeccop.livejournal.com/156763.html

Более того, маленькие кусочки невежества из говнотуториалов слипаются и образуют лавины, сметающие массы желающих изучать Хаскель. В результате только самые упорные добираются до вершины.

Поржал. Говнолавины из говнотуториалов смывают говномассы, и только самые упоротые добираются до вершины говнохаскеля. :D

Manhunt ★★★★★
()
Ответ на: комментарий от Love5an

> «КАК» это инженерия. А наука всегда отвечает только на вопрос «ЧТО»

Никакая наука никогда не отвечает на вопрос «ЧТО». Ни физика, ни математика, ни какая другая. Этим вопросом интересуется разве что философия, но это не наука.

Miguel ★★★★★
()
Ответ на: комментарий от eugine_kosenko

>Реальная польза монад в том, что они позволяют спрятать «под коврик» ненужные детали реализации и сократить объем кода.

Насколько я понимаю, то ещё нужно доказать, что собственная монада - это монада, т.е. выполняются условия. Инкапсулировать многое можно и без этого, тогда в чём же смысл?

login738246
() автор топика
Ответ на: комментарий от login738246

> ещё нужно доказать, что собственная монада - это монада, т.е. выполняются условия

Верно. К счастью, обычно это достаточно несложно сделать (либо просто увидеть).

Мы были бы счастливы, если бы у нас был какой-то инструмент для автоматической проверки, но, к сожалению, эта задача алгоритмически неразрешима.

Miguel ★★★★★
()
Ответ на: комментарий от login738246

Насколько я понимаю, то ещё нужно доказать, что собственная монада - это монада, т.е. выполняются условия

equational reasoning. берёшь и проверяешь. на всяким случай запускаешь QuickCheck, и ещё раз проверяешь

Инкапсулировать многое можно и без этого, тогда в чём же смысл?

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

хотя на альтернативные варианты чисто функционального State я бы посмотрел

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>смысл в том, что так это сделать тоже можно - и иногда это бывает удобно. никаких серебрянных пуль, просто один из инструментов

ну тогда вопрос встаёт еще острее, зачем их выделять в отдельный вид в других языках( не хаскелле)? С прочими понятиями из хаскелла стрелками функторами тоже самое?

login738246
() автор топика
Ответ на: комментарий от jtootf

>просто один из инструментов

т.е. нужно использовать комбинаторы( какой-там Y,T?) для рекурсивных лямбд, вместо определения в локальном окружении? т.е. не все теоретические инструменты нужны на практике, а иногда и вредны.

login738246
() автор топика
Ответ на: комментарий от login738246

ну тогда вопрос встаёт еще острее, зачем их выделять в отдельный вид в других языках

не понял. что значит «выделять в отдельный вид»?

С прочими понятиями из хаскелла стрелками функторами тоже самое?

ну смотря что под этим подразумевать. если в языке есть конструктор списка и map, то там уже есть по крайней мере один функтор. который есть частный случай стрелки

просто в Haskell для них есть классы типов, а в других языках - нет. и соответствующих плюшек, стало быть, тоже

jtootf ★★★★★
()
Ответ на: комментарий от login738246

т.е. нужно использовать комбинаторы( какой-там Y,T?) для рекурсивных лямбд, вместо определения в локальном окружении?

что значит - нужно? нужность инструмента определяет программист, который им пользуется. если тебе по какой-то причине удобней работать с комбинаторами - работай с ними. в чём проблема?

т.е. не все теоретические инструменты нужны на практике, а иногда и вредны.

ну типа того, наверное. хорошо, что монады - практический инструмент :)

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>просто в Haskell для них есть классы типов, а в других языках - нет. и соответствующих плюшек, стало быть, тоже

может быть стоило бы развернуть?

login738246
() автор топика
Ответ на: комментарий от login738246

>т.е. не все теоретические инструменты нужны на практике, а иногда и вредны

Т.е. не все теоретические _уже_ нашли область своей «практической» применимости. И тем более «популяризовались» до сравнимого с «монадами» уровня.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

>Т.е. не все теоретические _уже_ нашли область своей «практической» применимости.

некоторые теоретические инструменты нужны только для теории. непрактичны они.

И тем более «популяризовались» до сравнимого с «монадами» уровня.

И как тут выяснилось - монады скорее фича языка, нежели принципиально новая абстракция, которая даёт реальную пользу по сравнению с существующими. И более того, даже пропагандисты монад не особо следят за строгостью монад.

login738246
() автор топика
Ответ на: комментарий от login738246

И как тут выяснилось - монады скорее фича языка

внезапно. вот, оказывается, что мы тут выяснили :)

принципиально новая абстракция

да в этом мире вообще ничего нового нет

реальную пользу по сравнению с существующими

ни одного сравнения в треде не было - так и не определились, с чем же всё-таки сравнивать

даже пропагандисты монад не особо следят за строгостью монад

ну покажите мне хоть одного пропагандиста монад, ну. что это за мифический зверь такой, и как он должен следить за их строгостью?

jtootf ★★★★★
()
Ответ на: комментарий от login738246

монады скорее фича языка

и как бы там ни было, но монады - не фича языка в Haskell. фича языка - классы типов, а класс монады - всего лишь одно возможное использование этой фичи. так-то!

jtootf ★★★★★
()
Ответ на: комментарий от login738246

> И как тут выяснилось - монады скорее фича языка, нежели принципиально новая абстракция, которая даёт реальную пользу по сравнению с существующими.

Кто выяснил? Я уже писал в этом треде. Смотри на async workflow из F#. Совершенно другой и непохожий язык. Офигительная функциональность для асинхронных вычислений. Та же самая монада. Точнее разновидность монады continuation.

dave ★★★★★
()
Ответ на: комментарий от login738246

>некоторые теоретические инструменты нужны только для теории. непрактичны они.

Не поминай «∄» всуе! Истины в твоей фразе только на: лично ты и именно сейчас не представляешь, как получить «реальную пользу» от «этого» инструмента.

И как тут выяснилось - монады скорее фича языка, нежели принципиально новая абстракция,

Конечно, не новая. Оно, скорее всего, старше нас с тобой (:возможно даже вместе:). И «практически применяется» в программировании оно дольше, чем многие тут присутствующие программируют. Какая ж тут новизна.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Гы.
Опять двадцать пять. Ну и покажите же плюсы и реальную пользу от этой «абстракции» в практическом приложении.

Love5an
()
Ответ на: комментарий от Miguel

Какое-то узкое понимание «что».
Под наукой я тут имею ввиду фундаментальную науку.

Фундаментальная наука это вид познавательной деятельности. Она изучает объекты и явления, просто изучает и использует полученные знания для дальнейшего изучения окружающего мира. И она ничего совершенно не говорит о том, что с ними потом делать(т.е. «КАК»). Этим занимается прикладная наука(т.е. «инженерия»; хотя, конечно, можно это трактовать как не совсем одно и то же).

Love5an
()
Ответ на: комментарий от Love5an

>покажите же плюсы и реальную пользу от этой «абстракции» в практическом приложении

В абстрактном вакуумно-сферическом приложении?

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

>>покажите же плюсы и реальную пользу от этой «абстракции» в практическом приложении

В абстрактном вакуумно-сферическом приложении?

При чем что характерно, хаскель он не знает и любой пример на нем автоматически отправит в /dev/null, ибо ваистену.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Ты то конечно, его очень знаешь, умник. Кто же еще может такой бред как «Абсолютно ленивый язык программирования» написать, кроме как «знающий хаскель».

Love5an
()
Ответ на: комментарий от DonkeyHot

Т.е. на хаскеле кода не пишут?
А если и пишут, то левым пальцем правой ноги, и объяснить чего написали, и что оно делает, не могут? :)

Love5an
()
Ответ на: комментарий от Love5an

>Ты то конечно, его очень знаешь, умник. Кто же еще может такой бред как «Абсолютно ленивый язык программирования» написать, кроме как «знающий хаскель».

Я слов «абсолютно ленивый язык» не писал. Ты так и не понял того, что я про сайд эффекты в хаскеле писал.

Т.е. на хаскеле кода не пишут? А если и пишут, то левым пальцем правой ноги, и объяснить чего написали, и что оно делает, не могут? :)

Может ты больше не будешь так уныло троллить?

Waterlaz ★★★★★
()
Ответ на: комментарий от LamerOk

Ну вот, а я-то надеялся, что все оценят иронию

у меня от подобных тредов глаз дёргаться начинает

jtootf ★★★★★
()
Ответ на: комментарий от Love5an

>Т.е. на хаскеле кода не пишут?

При чём тут хаскель? Разговор был об субъектисности суждений об «практической неприменимости» абстракций. Из того, что ты не видишь монады «везде», следует вывод не об их непрактичности но об «ограниченности» твоих знаний|умений|интересов|etc.

DonkeyHot ★★★★★
()
Ответ на: комментарий от Love5an

> Под наукой я тут имею ввиду фундаментальную науку.

Agreed.

_что_ с ними потом делать(т.е. «_КАК_»)

Один я вижу противоречие в этой фразе? Не говоря уже о том, что она не имеет никакого отношения к делу.

Именно в фундаментальной науке никого не е^Hволнует, ЧТО такое электрон, например. Единственный интересный вопрос - КАК этот электрон себя ведёт; ещё точнее - КАК он себя проявляет.

Miguel ★★★★★
()
Ответ на: комментарий от Love5an

> Ты то конечно, его очень знаешь, умник.

Ну, я знаю. Можешь глянуть на http://migmit.vox.com , если не веришь. И таки да, неленивые конструкции в Хаскеле - вопрос оптимизации.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.