Слушайте, а что за долбоёб такой @Elemir? Пришёл ко мне в #tziztg и начал (еще и с обзывательствами) доказывать, что в цитате
> The only thing a function can do in Haskell is give us back some result based on the parameters we gave it. If a function is called two times with the same parameters, it has to return the same result.
нет логической ошибки. Причём начал это доказывать, приводя дебильные цитаты вроде "Типичная функция «getValue :: IO Int» возвращающает не значение поле, а лишь «ссылку» на состояние этого поля." (ссылку :). То есть, в ответ на логическую ошибку, в принципе, не зависящую от ЯП (то, что если в ЯП отсутствует мутабельность означает одинаковость возвращаемых значений при одних и тех же аргументах) начал рассказывать про то, что Хаскель возвращает ссылку. Ну что за кретин?
@0xd34df00d: Даже незнакомые с Лямиркой люди говорят. что он долбоеб.
and @DZhon, @kurkuma
Надеюсь, ты его забанил?
meet the Elemir
я знал, что встречу тебя в этом треде
:3
этот тред слишком узок для нас двоих. застрянем
Нормик.
Олсо, формально Лямир в каком-то смысле прав. Функция сама ничего не делает и не выполняет, она лишь возвращает некоторый объект, который можно выполнить.
зафрендил. но подумываю чтоб забанить.
Условный readSmth :: IO Int ничего сам не читает и не делает, а лишь возвращает объект, который можно особым образом потыкать, чтобы получить конкретный Int. Очевидно, это тыканье нечистое и возвращает каждый раз разные объекты, поэтому его можно выполнять только в нечистом блоке. IO в сигнатуре об этом и говорит.
Система типов хаскеля построена таким образом, что ты можешь комбинировать функции, возвращающие всякие там IO, как будто они возвращали бы чистые ФПшные иммутабельные хуйни. Но расковырять сам IO ты можешь только в «грязном» IO-монадическом коде. Собственно, отсюда и вся хуйня про монады, про правила работы с ними и прочую теорию категорий.
моя претензия в том, что:
1. твоё утверждение специфично для х-ля.
2. когда человек говорит о "чистых функциях", в особенностях х-ля речь будет идти о выполнении этого объекта (о котором ты написал, что функция его возвращает). и когда речь идёт о гарантии одинаковости возвращаемого значения, речь идёт не о гарантии одинаковости возвращения объекта, который можно выполнить, а о гарантии одинаковости результата выполнения этого объекта (ох я тут снова пиздец какими научными терминами заговорил)
да, х-ль крут, но по сути это всё обёртки над простой логикой, которую поменять мне видится сложным, что есть сайд-эффекты, и они ничем толком от мутабельного состояния не отличаются. и утверждать "нет мутабельного состояния, значит можно делать выводы о возвращаемом значении на основании только лишь аргументов" неверно.
Собственно, про монады говорят, что это эндофунктор в категории Hask.
Категория Hask — категория типов языка Haskell, где стрелками являются функции из одного типа в другой. Очевидно, что все аксиомы категорий для такого объекта выполняются.
Функтор — это такая особая функция, которая действует из одной категории в другую (то есть, преобразовывает объекты категории и отношения между ними по некоторым правилам). Эндофунктор — функтор из категории в нее же. Что разумно: если какой-нибудь Int — тип в хаскеле, то IO Int тоже тип. И Maybe Int. И хуе-мое. При этом также легко проверить, что если для некоторых типов a, b, c выполняются аксиомы категорий, то для m a, m b и m c, где m — некоторая монада, все это тоже будет выполняться. Поэтому все заебись.
Надеюсь, хоть что-то понято.
А гарантии одинаковости выполнения этого объекта нет. Поэтому это и нечистый код. Опять же, все это так устроено, что из чистого кода (вне IO-монады) ты можешь вызывать только чистый код. Ты можешь кидать туда-сюда эти IO, но не можешь их раскручивать. Единственная «точка входа», в которой можно что-то делать и откуда вызывать нечистое говно — main. Как только ты вызвал чистую функцию, в ее контексте ты потерял всякую возможность раскручивать IO и вызывать нечистый код.
Ну почему же.
ну, я об этом и говорю. если есть IO — значит это нечистый код. и значит нельзя гарантировать одинаковость выполнения.
Именно. Поэтому стараются минимизировать объем IO-части.
Если первый кусок еще как-то понимал, начиная с "Что разумно: если какой-нибудь Int — тип в хаскеле, то IO Int тоже тип." — перестал (я просто не понял, что за IO Int). Но ты не парься, разберусь попозже уж.
Рекомендую сначала освоить понятие монады, и что в них общего, а потом переходить к монаде IO.
Maybe и List — примеры хороших, годных и простых монад. Потом уже можно пообмазываться и поломать голову над State :3
позерский язык
чё?
Формально элемирка прав, но его манера общения в любом случае говорит о полнейшем мудачестве :)
уёбки оба два
Это такой буйный поциент
Лол, читай тред :3
Да почитал вот, у тебя манера изложения в этом вопросе не показалась мудаческой :3
:(
Привет, пукиш.
хачкелль — говно
#tzithz у всех треснула жопа, запидорлистил всех в этом треже