LINUX.ORG.RU
Ответ на: комментарий от anonymous

Нормальную композицию монад в хаскеле сделать не удалось

Она вообще невозможна. Математически. Композиция (математических) монад не обязана сама быть монадой.

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

> Да никто их не «херит». Если программа компилируется, то с типами в ней всё в порядке.

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

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

им приводишь пример, в котором программа с ошибкой типов спокойно компилируется

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

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

> Короче. Либо ты моделируешь GADT, используя только обычные ADT, либо мы записываем тебе слив.

Ололо. Школолодебил будешь еще решать, кому когда записывать слив.

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

> А я тебе это и говорю.

Но это не сабтайпинг, вот в чем проблема. Это просто особенности поведения чекера, которые позволяют чекеру в _некоторых частных случаях_ допускать код так, _как будто_ сабтайпинг есть. Это как если захардкорить полиморфизм для арифметических операций (но других средств для реализации полиморфизма не предоставить) и потом говорить «да у нас же тут ПОЛИМОРФИЗМ». Нет, не полиморфизм - куцый огрызок.

Не, ни фига. Это программирование на типах, с трудом имитирующее полиморфизм.

Ну вообще-то плюсовые шаблоны гораздо шире полиморфизма. В том смысле, что все, что можно при полиморфизме - можно в плюсовых шаблонах. + можно еще кое-что. Так что реализацией полиморфизма плюсовые шаблоны являются _в том числе_.

«Так же» не будет.

Ну а где там прблема?

Ясно, то есть, что такое монады ты тоже не в курсе.

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

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

> На практике в динамическом языке просто не могут воспроизвести достоинства статики.

Не «достоинства статики», а «костыли статики». Но зачем воспроизводить костыли? Это удел хаскидебилов, которые на любом языке пытаются писать как на хаскиле, планомерно пытаясь воспроизвести все его косяки. если какой-то косяк воспроизвести не удается - выносится вердикт о том, что язык плохой.

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

> Разуй глазёнки, дитё. Ты пока не привёл ничего, отдалённо смахивающего на аргумент.

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

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

> Один человек за месяц на лиспе написал параллелящийся компилятор в vhdl - вот это круто.

Параллелящийся или параллелящий?

А эффективные методики как раз дали миру выкидыши типа vhdl.

А не дали бы - не написал бы тот человек компилятор в VHDL.

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

Но это не сабтайпинг, вот в чем проблема.

Тогда сформулируй, что такое сабтайпинг. Потому как пока что это именно он.

В том смысле, что все, что можно при полиморфизме - можно в плюсовых шаблонах.

Нет. Я на этом форуме уже показывал фишку, которая отлично работает с полиморфизмом (в частности, джавскими дженериками), и не работает с шаблонами.

Ну а где там прблема?

В том, что типы нужны.

это просто ты не понимаешь, что такое монады, ткуда они пошли и как работают

Успокойся, я-то понимаю. Из сопряжённых функторов они пошли. В частности - из свободных структур.

А вот твоё описание к ним не подходит совсем, увы.

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

Но зачем воспроизводить костыли?

Не знаю, это ты настаиваешь на костылях.

Я говорю о достоинствах.

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

Я пока что вобщем-то ничего и не доказываю

Ты и не умеешь.

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

> Ну, если сидишь в психушке, то можно.

ВсЕ, кто пишут на хаскеле - сидят в психушке? Я знал, я знал!

Мешок картошки не является ни множеством, ни многообразием.

Он является множеством и многообразием в той же степени, вкакой хаскимонады являются монадами. То есть удовлетворяет определению множества и многообразия.

Ну да. Функций в категории эндофункторов.

Не функций, а стрелок. Или морфизмов, на худой конец. Иди учи уже определения, дебил.

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

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

Нет, объекты-то разные. Просто ведут себя одинаково.

Потренируешься.

Мне-то зачем? Это же ты ничерта не знаешь. Вот и просветишься.

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

ВсЕ, кто пишут на хаскеле - сидят в психушке?

Нет, только те, кто путает мешок картошки с множеством.

То есть удовлетворяет определению множества и многообразия.

О, ну, давай-давай, сформулируй определение множества, послушаем.

Не функций, а стрелок.

Угу. В теоркате понятия «функция», «стрелка» и «морфизм» употребляются как синонимы.

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

> Она вообще невозможна. Математически. Композиция (математических) монад не обязана сама быть монадой.

Вопрос еще в том, что такое «композиция (математических) монад».

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

Нет, объекты-то разные.

Одинаковые с точностью до изоморфизма. А мелкие технические различия никому не интересны.

Мне-то зачем?

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

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

Вопрос еще в том, что такое «композиция (математических) монад».

Ну, термин «композиция» имеет вполне определённое значение, вообще-то.

Или ты пользуешься собственным определением? Тогда формулируй.

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

> Ты не привёл пример программы. Ты привёл пример малюсенького кусочка кода

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

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

Параллелящийся или параллелящий?

Параллелящий, описался.

А не дали бы - не написал бы тот человек компилятор в VHDL.

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

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

> Или по-твоему разработкой с++ занимались птушники без образования?
Образование-то есть, а вот толку — маловато будет.

Даже лямбд нормальных сделать не смогли, это уже даже не смешно становится.

Вначале они не смогли сделать нормально ООП — я молчал, ведь были ЯП с нормальным ООП.
Затем они не смогли сделать нормальные шаблоны — я молчал, ведь были языки с нормальными шаблонами.
Затем они не смогли сделать нормальные лямбды — я молчал, ведь были ЯП с нормальными лямбдами.
А когда они не осилили сделать нормальное комьюнити, то не осталось никого, кто мог бы им помочь.

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

>> Ну-ка дай-ка мне определение «программы».

Yawn. То, что компилируется в исполняемый файл.

А ты и правда очень тупой дебил.

// другой анонимус

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

> В сортах говна не разбираюсь.

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

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

> Понятно, не можешь. То есть, ты в очередной раз спорол чушь.

С неразмеченными типами-объединениями GADT выражается. Может и без них можно, но не уверен.

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

> Тогда сформулируй, что такое сабтайпинг. Потому как пока что это именно он.

Для сабтайпинга надо иметь нетривиальное отношение подтипирования на монотипах. В хаскеле у нас только жопа (которая подтип любого типа) и все, то есть отношение тривиальное. При сабтайпинге я могу о каком-то типе сказать «к типу Х применимы все операции типа Y» - в хаскеле же ты можешь выносить такие утверждения только о полиморфных аргументах, но не о самих типах. По-этому сабтайпинга в хаскеле нет. Для сабтайпинга нужно наследование, либо типы-объединения.

Нет. Я на этом форуме уже показывал фишку, которая отлично работает с полиморфизмом (в частности, джавскими дженериками), и не работает с шаблонами.

Это особенность джавовский дженериков, но никак не полиморфизма. Алсо, что за фишка?

В том, что типы нужны.

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

Успокойся, я-то понимаю. Из сопряжённых функторов они пошли. В частности - из свободных структур.

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

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

> Не знаю, это ты настаиваешь на костылях.

Я-то как раз предлагаю от костылей избавиться, это ты все твердишь «хочу статические костыли, хочу статические костыли».

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

Мигель, почему ad-hoc в плюсах это виртуальные функции (твоё утверждение где-то выше)?

Ad-hoc это перегрузка функций и специализация шаблонов. Параметрический - шаблоны и виртуальные функции.

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

> Нет, только те, кто путает мешок картошки с множеством.

Поскольку монады в хаскеле имеют отношения к математических точно такое же, как мешок картошки - к множествам, то, выходит - все?

О, ну, давай-давай, сформулируй определение множества, послушаем.

Под «множеством» мы понимаем соединение в некое целое M определённых хорошо различимых предметов m нашего созерцания или нашего мышления (которые будут называться «элементами» множества M).

Ну или через аксиоматику. Мы можем делать с мешком картошки все, что нам разрешают делать с множеством аксиомы теории множеств.

Угу. В теоркате понятия «функция», «стрелка» и «морфизм» употребляются как синонимы.

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

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

> Одинаковые с точностью до изоморфизма.

До изоморфизма где?

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

Я умею, все ок.

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

> Ну, термин «композиция» имеет вполне определённое значение, вообще-то.

Композиция монад? Давай определение.

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

> Ты привёл кусок кода который не только компилируется, но и исполняется корректно.

Нет. При корректном исполнении он должен вернутьцелое число, а он вернул дробь. так что результат некорректен.

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

> Yawn. То, что компилируется в исполняемый файл.

Незачет, твое определение не учитывает наличия интерпретаторов. Кроме того, программа может быть написана на ЯП, для которого не существует компилятора/интерпретатора и даже существовать не может - например на естественном языке. Давай втрую попытку. Лучше старайся.

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

> Мигель, почему ad-hoc в плюсах это виртуальные функции (твоё утверждение где-то выше)?

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

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

> Параметрический - шаблоны и виртуальные функции.

Виртуальные функции вообще разрешаются в рантайме, так что это не ad-hoc и не параметрический полиморфизм (параметрический блеать! от слова «параметр»! где в вирутальных ф-ях параметр?).

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

Для сабтайпинга надо иметь нетривиальное отношение подтипирования на монотипах.

Почему именно на «монотипах»?

В хаскеле у нас только жопа (которая подтип любого типа)

Ну не позорься. Ну нет такого типа «жопа».

При сабтайпинге я могу о каком-то типе сказать «к типу Х применимы все операции типа Y» - в хаскеле же ты можешь выносить такие утверждения только о полиморфных аргументах, но не о самих типах.

К типу forall a. a -> a применимы все операции, применимые к типу Int->Int.

Это особенность джавовский дженериков, но никак не полиморфизма. Алсо, что за фишка?

Нет, особенность полиморфизма. В Хаскеле работает, в жабе работает, в шарпе работает. В плюсах - хрен.

Код на Хаскеле здесь: Равные длины векторов

Код на плюсах и на шарпе здесь: http://migmit.livejournal.com/32688.html

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

Там, где ты будешь собирать конкретную реализацию.

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

Отнюдь.

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

Ad-hoc это перегрузка функций и специализация шаблонов.

Нет. Ни то, ни другое не имеет отношения к полиморфизму вообще.

Параметрический - шаблоны и виртуальные функции.

1) Параметрического полиморфизма в плюсах нет. Шаблоны - кривая имитация.

2) Каким боком виртуальные функции ты записал в параметрический полиморфизм, для меня загадка. Параметрический полиморфизм - один и тот же код работает с разными типами. Виртуальная функция пишется по-разному для каждого типа.

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

Под «множеством» мы понимаем соединение в некое целое M определённых хорошо различимых предметов m нашего созерцания или нашего мышления (которые будут называться «элементами» множества M).

Понятно, что такое «определение» ты тоже не в курсе.

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

> Ну вот в случае с CL нередки коммиты вроде: «№ля, забыл сохранить буфер в Емаксе!». При всём при том, что предыдущий коммит был сделан для полностью рабочего кода. Только код эволюционировал в лисповом образе, а на диск его из редактора сохранить забыли.

Э-э-э можно тупой вопрос. Код эволюционировал в буфере емакса или же с помощью REPL?

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

> Код эволюционировал в буфере емакса или же с помощью REPL?

Такая среда как SLIME всё превращает в REPL. Есть специальный буфер *REPL*, но никто не будет в нём править код функции. Функция правится по месту расположения, затем команда C-c С-с её компилит и теперь весь (или почти весь) код используется новое определение.

Т.е. в случае специализированных сред разработки (таких как SLIME) REPL это не конкретная командная строка, а в понятие более высокого уровня, ибо код может быть выполнен/скомпилен практического из любого места.

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

Нет. При корректном исполнении он должен вернутьцелое число, а он вернул дробь. так что результат некорректен.

Кому должен? Тебе? У тебя функция определена для Num'ов. Хочешь чтобы вывели Int, используй результат как Int. А так из двух Num'ов, на стадии компиляции был выбран более общий.

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

Чем Parsec не DSEL, например?

Нууу... тем что он не DSEL.

Конечно, потому что это internal DSL :)

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

> Такая среда как SLIME всё превращает в REPL. Есть специальный буфер *REPL*, но никто не будет в нём править код функции. Функция правится по месту расположения, затем команда C-c С-с её компилит и теперь весь (или почти весь) код используется новое определение.

Ага, понятно, спасибо. Но вызываемые измененной функцией функии не перекомпилируются, даже если были изменены со времени последней загрузки, подобно тому как это происходит в emacs lisp, если их явно не перекомпилировать?

Вообще, по сабжу, смотрел и haskell и разные лиспы, пришел к выводу, что нужно курить внимательнее CL. Жаль, что нет столь развитых бидингов к Qt, подобно PyQt для Python. Вот интересно, тот же CommonQt обеспечивает полное покрытие всех возможностей Qt?

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

Э-э-э можно тупой вопрос. Код эволюционировал в буфере емакса или же с помощью REPL?

Со SLIME это одно и то же.

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

> Но вызываемые измененной функцией функии не перекомпилируются,

даже если были изменены со времени последней загрузки


Хм, что значит были изменены? В процессе редактирования кода среда, конечно, автоматически его не перекомпилирует (да это и невозможно), для вызова перекомпиляции надо жать C-c С-c. Но это делается всегда и на автомате, как только редактирование функции законченно или появляется подозрение, что это уже можно скомпилировать, тот тут же жмётся C-c C-c просто даже для проверки того, что это компилируется. Плюс, компилятор может указать на ошибку или выдать предупреждение. Ситуация, когда код функции был изменёнен, но его забыли перекомпилировать в реальной практике представляется чем-то достаточно фантастическим.

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