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

> Почему некорректный?

Потому что ф-я f согласно своей семантике (которая следует из предметной области) должна принимать только целые числа. То, что я там написал 2.0 - это просто опечатка. Но чекер съел и не подавился.

forall a. a -> a – подтип Int -> Int.

И это весь сабтайпинг?

А тайпклассы разрешаются в компайл-тайме, поскольку, не обессудь, не относятся к ad-hoc.

Относятся, относятся. иди почитай, что такое ad-hoc полиморфизм.

Когда я пишу на C++ – конечно.

Ломающие известия! В с++ ad-hoc полиморфизм тоже разрешает в компайлтайме. А ты - наследственный дебил, который не знает ни хаскеля, ни с++, ни логики, ни теории типов.

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

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

Да как раз-таки связаны.

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

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

> В шарпе автоматический вывод типов частично присутствует.

А я и не говорил про частичный - я говорил про полный. Полный - зло, частичный - добро.

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

> Вот как раз с инструментами для тестирования – полнейший извращённый секс и происходит.

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

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

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

Ну так если без вывода типов плохо - чего не добавляют?

Ну, какой-то вывод типов там таки есть.

А полного то нет. Хотя могли добавить. Но не добавили. Почему?

Так это не у меня надо спрашивать. Моё предположение – тупо не знали (не понимали) этого «бэкграунда».

Смешно.

Не, школота до них ещё почти не добралась.

Ну как раз наоборот. Всем же известно, что школота любит маргинальные языки за то, что можно понтоваться. Ну типа «пишу на лиспе», «пишу на хаскеле». И тут чем заумнее выглядит ЯП - тем лучше. Лисп вот уже не так популярен среди школоты - слишком прост. С другой стороны, хаскель - самое то. Написал пару факториалов - уже, считай, Ph.D. CS. А в беседе можно монады, GADT и зигохистоморфические препроморфизмы ввернуть, опять же, - вообще блеск. И главное - все равно никто значения этих баззвордов не понимает, так что можно не бояться нарваться на знающего человека. Вот и не боятся.

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

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

А где это было сказано?

Если эта функция будет где-то использована, то «ошибка» вылезет.

И это весь сабтайпинг?

Что-то не так?

Относятся, относятся. иди почитай, что такое ad-hoc полиморфизм.

Читал уже. Не относятся. См. мой пример.

В с++ ad-hoc полиморфизм тоже разрешает в компайлтайме.

Нет. В C++ ad-hoc полиморфизм – это виртуальные функции. Они разрешаются в рантайме.

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

Обязательно нужна.

Или, может, желаешь пояснить, как можно сделать что-то подобное без неё?

самый классный пример такого подхода - монады

Термин «монада» придуман математиками.

Вообще же, повторяю, можно убрать из хаскеля тайпклассы и парамерический полиморфизм останется.

Естественно. И что?

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

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

Что ты говоришь.

То есть, при первом же запуске в этот твой километровый switch придут все возможные типы данных?

Интересно, чего ж тогда товарищи так бьются за 100% покрытие, оно же само получается (по твоей логике)?

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

> Все практически используемые – да.

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

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

> Что не отменяет того факта, что он есть.

Нет, любители хаскеля как раз предпочитают придавать смысл тому, в чем смысла нет. Чтобы было загадочней. Монады - яркий том пример. Блестящий просто троллинг - развести столько хайпа вокруг тривиальной банальщины.

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

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

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

Ну так если без вывода типов плохо - чего не добавляют?

Так постепенно и добавляют. Вон, Ocaml уже в Visual Studio вошёл.

Смешно.

Ну, Маккарти сам говорил, что лямбда-исчисления не понимает.

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

Ты нарвался. Так что можешь прекращать базар.

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

То есть тот же тайпчекер хаскеля не тянет на практически используемый.

Это почему не тянет?

И да, он таки всегда завершается.

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

Монады - яркий том пример. Блестящий просто троллинг - развести столько хайпа вокруг тривиальной банальщины.

Ну-ну. Зайди на кафедру высшей алгебры в каком-нибудь приличном ВУЗе и расскажи, что монады – тривиальная банальщина и никому не надо.

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

Фу, ну не надо так бездарно сливать.

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

> А где это было сказано?

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

Если эта функция будет где-то использована, то «ошибка» вылезет.

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

Что-то не так?

Ну если сабтайпинг работает на двух типах - это не сабтайпинг, это говно.

Читал уже. Не относятся.

плохо читал, читай дальше. Или зайдем с другого конца - напиши определение ad-hoc полиморфизма.

Нет. В C++ ad-hoc полиморфизм – это виртуальные функции.

Нет. В с++ ad-hoc полиморфизм - это специализация шаблонов. Она разрешается в компайлтайме. А вот в том же сишарпе, например, ad-hoc полиморфизма нет (хотя виртуальные ф-и есть) - только параметрический.

Или, может, желаешь пояснить, как можно сделать что-то подобное без неё?

Точно так же. Я вообще не вижу ни одного места, где в этом подходе использовались какие-то вещи специфичные для статической типизации.

Термин «монада» придуман математиками.

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

Естественно. И что?

Это значит, что ониортогональны.

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

> То есть, при первом же запуске в этот твой километровый switch придут все возможные типы данных?

На практике там не километровый switch, а только пара кейзов, и да - на первом же тесте туда придут все возможные варианты, потому что на практике такое происходит, когда у нас, допустим, приходит на вход ф-и список, в котором элементы могут быть стрингами или числами (например) и естественно в первом же тестовом списке будут и стринги и числа.

Интересно, чего ж тогда товарищи так бьются за 100% покрытие,

Потому что дебилы.

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

> Так постепенно и добавляют. Вон, Ocaml уже в Visual Studio вошёл.

visual studio - это такой язык? И что - в этот язык добавили тайп инференс?

Ну, Маккарти сам говорил, что лямбда-исчисления не понимает.

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

Ты нарвался.

Вообще-то, я намекал на тебя. Действительно - логики и теори алгоритма не знаешь, как только речь заходит о теории типов - тоже плывешь, что такое полиморфизм - снова не знаешь. Очевидный школьник с факториалами.

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

> Это почему не тянет?

Ну тогда и для какой-нибудь агды тянет.

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

> Ну-ну. Зайди на кафедру высшей алгебры в каком-нибудь приличном ВУЗе и расскажи, что монады – тривиальная банальщина и никому не надо.

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

Фу, ну не надо так бездарно сливать.

А чем он ДСЛ?

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

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

Приведи пример DSEL пожалуйста и разъясни что его делает DSEL'ем.

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

А нигде.

Ну дык в чём проблема указать?

Ну если сабтайпинг работает на двух типах - это не сабтайпинг, это говно.

forall a. a -> a <: forall a. Num a => a -> a <: Int -> Int

В с++ ad-hoc полиморфизм - это специализация шаблонов.

Специализация шаблонов вообще к полиморфизму не имеет отношения. Шаблоны – это чистое программирование на типах, без полиморфизма и без (почти) вывода.

Другое дело дженерики в Java – там да, там полиморфизм. Параметрический.

Точно так же.

То есть, не знаешь.

взяли тривиальный паттерн программирования

Это какой?

Это значит, что ониортогональны.

И что?

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

На практике там не километровый switch, а только пара кейзов

Тю. Значит, кроме хелловорлдов ты ничего не писал.

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

visual studio - это такой язык?

Это практически гарантированный успех.

Очевидно, после Маккарти лиспом занималась еще куча людей - в том числе прекрасно понимавших и лямбда-исчисление и теорию типов. Аналогично с сишечкой и т.д..

Сомнительное утверждение. Я бы сказал, что понимающие люди занялись C++ совсем недавно. Откуда и возникли, например, лямбды в C++0x.

Вообще-то, я намекал на тебя.

Намекал на меня, получилось – про тебя.

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

А при чем тут монады в математике?

При том, что это то же самое.

Вот возьмем мешок картошки - можно рассматривать его как множество

Нельзя.

Просто тайпкласс с парой функций.

Угу. И математическая монада тоже – всего один функтор и пара функций.

Хотя вообще монады и с точки зрения математики вещь весьма простая.

Да. Но необходимая.

А чем он ДСЛ?

Сформулируй своё понимание DSL, а то утомил слегка.

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

>Мешок картошки - вещь тривиальная. Хаскимонады (в смысле программирования) - тоже вещь тривиальная.

Я не понимаю что ты этим хочешь сказать. Если подходить с такой позиции, то все получается тривиально.

И вообще говорить в хаскеле о монадах... Это сразу же показывает уровень владения...

Во-первых, уместнее говорить о тройке Functor/Applicative/Monad. Во-вторых, если уж и говорить о монадах, то говорить «монадический интерфейс к...». В-третьих, монады, описанные в многочисленных туториалах в реальной жизни НЕ используются, в реальной жизни приходится пользоваться монадическими трансформерами. В-четвертых, более «продвинутые» интерфейсы типа Arrow не «пошли» именно из-за своей «продвинутости».

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

В-четвертых, более «продвинутые» интерфейсы типа Arrow не «пошли» именно из-за своей «продвинутости».

Ой, не сказал бы.

У меня от Arrow впечатление, скорее, чего-то, сляпанного на скорую руку. Они не overcomplicated, они undercomplicated.

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

> Выберешь хаскель или таки родные оракловые батарейки?

Что угодно, только не оракловые батарейки!

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

> Ну дык в чём проблема указать?

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

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

и все эти гарантии похерить?

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

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

> Лисп вот уже не так популярен среди школоты - слишком прост. С другой стороны, хаскель - самое то.

Отстаешь от жизни. Нынче школота агдой понтуется. Какацкель - прошлый век.

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

> подогнали под определение монады и на том слямзили термин

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

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

> Зайди на кафедру высшей алгебры

Ты бы еще на кафедру высшей арифметики послал.

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

> И да, он таки всегда завершается.

Завершается. Сегфолтом. С квадратичной сложностью, наложив в штаны десяток гигов свопа.

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

> Нет, эти люди уже давно защитились.

Этим людям теперь в месяц по статейке пердычить надо, иначе от халявной кормушки отлучат. «Publish or perish», и все такое.

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

Завершается. Сегфолтом. С квадратичной сложностью, наложив в штаны десяток гигов свопа.

Запусти хоть раз, школота.

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

Этим людям теперь в месяц по статейке пердычить надо

Yawn.

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

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

> forall a. a -> a <: forall a. Num a => a -> a <: Int -> Int

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

Специализация шаблонов вообще к полиморфизму не имеет отношения. Шаблоны – это чистое программирование на типах, без полиморфизма и без (почти) вывода.

Вообще-то наоборот. Плюсовые шаблоны - это классическая реализация параметрического и ad-hoc полиморфизма. иди уже прочитай, что такое полиморфизм.

То есть, не знаешь.

То есть - знаю. Так же. А ты видишь с этим какие-то проблемы? Какие?

Это какой?

Тривиальный - он на то и тривиальный, что названия у него нет. Такие вещи просто спокойно применяются на практике и никто даже не обращает на них внимания. Пока не приходит хаскиеб и не начинает кричать «да это ж МОНАДА! все в машину!». В данном случае идея простая - у нас есть функция и есть аргумент, который не подходит по типу к аргументу этой ф-и. Что мы делаем? правильно, функцию для трансформации из исходного типа в нужный. Все, вот и все монады.

И что?

Ортогональны - не связаны.

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

> Тю. Значит, кроме хелловорлдов ты ничего не писал.

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

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

> Это практически гарантированный успех.

Ну вот когда будет успех - тогда и позовешь. А пока - это только ни чем не обоснованные слова.

Сомнительное утверждение.

ничего сомнительного нет. Или по-твоему разработкой с++ занимались птушники без образования?

Я бы сказал, что понимающие люди занялись C++ совсем недавно. Откуда и возникли, например, лямбды в C++0x.

Я бы сказал, что наоборот. Знающие люди ушли от с++ в сторону нормлаьных языков, в результате чего плюсы окончательно скатились в говно с появлением с++0х. Даже лямбд нормальных сделать не смогли, это уже даже не смешно становится.

Намекал на меня, получилось – про тебя.

Да нет, все правильно намекнул. Это ты ведь не перестаешь расписываться в своем не знании прсотейших вещей.

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

хаскель и лисп - полное говно, на которое клюет только школота, чтобы подняться среди дебилов-сверстников

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

Если 50 лет это было узкое подмножество математических задач, то теперь это задачи науки (не только математики), бизнеса, инженерии, промышленности, телекома. Предметные области стали на порядки более богатыми и комплексными. Следовательно, для эффективного решения нужны новые подходы, методики, абстракции. Современные языки предоставляют их, Лисп и Фортран — нет.

Ты гонишь. Один человек за месяц на лиспе написал параллелящийся компилятор в vhdl - вот это круто. А эффективные методики как раз дали миру выкидыши типа vhdl.

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

> На практике, те, кто пишет на динамических языках, не пытаются воспроизвести костыли статики.

Нормальные люди пишут на статически типизированных языках (Java, шарп, C++), причем без всяких костылей. Костыли свойственны школоте с их рубишками, лиспами и какацкелями.

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

> лямбд нормальных

Оксюморон же

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

> Нельзя.

Можно, конечно.

При том, что это то же самое.

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

Угу. И математическая монада тоже – всего один функтор и пара функций.

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

Да. Но необходимая.

Да нет, в теоркате есть целый ряд эквивалентных монадам конструкций, применять которые не менее удобно, чем монады, в подавляющем большинстве случаев. Это не говоря о том, что сам теоркат вещь далеко не необходимая, т.к. он эквивалентен теории множеств.

Сформулируй своё понимание DSL, а то утомил слегка.

Почему я-то? Ты и формулируй. Ты же начал утверждать, что Х - ДСЛ. Вот и объясняй, что ты под этим понимаешь.

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

Но почему тогда Lisp настолько не распространён и непопулярен? Общепринятое объяснение у лисперов такое: «потому что 99% населения — быдло, не могущее в Lisp». Но, если следовать тебе, то Lisp проще С++? Противоречие.

У нас в конторе на CL даже девочки пишут. И если бы C++ в универах и на «курсах повышения квалификации» не преподавали, то его вообще бы не было видно.

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

> Нормальные люди пишут на Java, шарп, C++
...ведь они работают зарабатывать деньги, они не Роб Пайк.

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

Ну это и для обычного хаскеля выполняется

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

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

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

То есть - знаю. Так же.

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

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

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

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

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

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

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

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

Очень на то похоже.

Это ты ведь не перестаешь расписываться в своем не знании прсотейших вещей.

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

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

Можно, конечно.

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

мешок картошки, вдобавок к тому, что множество - еще и гладкое многообразие

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

Не функций, а естественных преобразований.

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

в теоркате есть целый ряд эквивалентных монадам конструкций

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

Почему я-то?

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

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

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

Очень на то похоже.


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

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

> Я не понимаю что ты этим хочешь сказать. Если подходить с такой позиции, то все получается тривиально.

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

Во-вторых, если уж и говорить о монадах, то говорить «монадический интерфейс к...».

Нет, не монадический интерфейс, а именно монада.

Во-первых, уместнее говорить о тройке Functor/Applicative/Monad.

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

В-третьих, монады, описанные в многочисленных туториалах в реальной жизни НЕ используются, в реальной жизни приходится пользоваться монадическими трансформерами.

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

В-четвертых, более «продвинутые» интерфейсы типа Arrow не «пошли» именно из-за своей «продвинутости».

Наоборот.

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