Два года в /fg/. Войти !bnw Сегодня Клубы
Двач. Я впервые заставил себя внимательно прочитать статью про монады в англовикипедии И обнаружил, что это оказывается хуйня. Я всегда думал, что это что-то заумное, мозговзрывательное и крайне трудное для понимания, раз штангисты на них так дрочат. ОЧЕВИДНАЯ БЛЯТЬ ХУЙНЯ и ВЕЗДЕ ПОЛЬЗУЮТСЯ В СКАЛЕ МОНАДЫ В ТВИСТЕДЕ МОНАДЫ В ЮНИКСОВОМ ШЕЛЛЕ МОНАДЫ ВСЮДУ МОНАДЫ МОНАДЫ МОНАДЫ МОНАДЫ
Рекомендовали: @l29ah @ndtimofeev
#V9JJM2 / @stiletto / 4479 дней назад

Можешь пояснить по хардкору без смс и теорката?
#V9JJM2/EWA / @goren / 4479 дней назад
@goren Я вот тебе объясню, а меня потом закидают говном, что ЯВСЁНЕТАКПОНИМАЮ ЯВСЁНЕТАКОБЪЯСНЯЮ В общем монады это как к "|" в шелле прикрутить возможность задавать логику его поведения.
#V9JJM2/UV3 / @stiletto --> #V9JJM2/EWA / 4479 дней назад
@stiletto То есть, она берёт вывод какой-то команды, что-то с ней делает, и передаёт другой?
#V9JJM2/4SC / @goren --> #V9JJM2/UV3 / 4479 дней назад
@goren Или передает не его. Или вообще не вызывает команду которая дальше за |
#V9JJM2/R1D / @stiletto --> #V9JJM2/4SC / 4479 дней назад
Тот самый случай, когда следует советовать не относиться к вещам слишком серёзно. Разтрубили, что монады — это что-то такое неземное и неописуемое, вот люди и пытаются достигнуть просветления. А на деле всё действительно просто. Олсо, как начинающий хаскеллист плюсую объяснение в uv3 — всё правильно понимаешь.
#V9JJM2/EX9 / @minoru / 4479 дней назад
Внезапно обнаружил, что у меня это было ПРАЗДНИЧНОЕ ОТКРЫТИЕ. Я и забыл что был день погромиста.
#V9JJM2/H2I / @stiletto / 4479 дней назад
А я быдло и до сих пор нихуя не понел. Функторы еще так себе, но монады это хуй проссышь что такое.
#V9JJM2/5O0 / @plhk / 4479 дней назад
@minoru А кто вообще придумал эту тему, что хаскель это заумный матан и сложно? Я бы сказал что плюсы намного мозговзрывательнее будут. Вообще, монады это как бы понятие из теории категорий, и я не думаю что оно такое простое (по крайней мере для меня, быдла). Но в хаскиле это обычный тайпкласс, для которого определены три функции и который позволяет как бы эмулировать последовательность выполнения.
#V9JJM2/HJ4 / @anonymous --> #V9JJM2/EX9 / 4478 дней назад
@kagami Это у некоторых людей просто не получается понять, что для написания программ на Haskell не обязательно понимать всю ту математику, на которой он основан.
#V9JJM2/FHT / @minoru --> #V9JJM2/HJ4 / 4478 дней назад
@minoru Это потому что хачкебляди постоянно пиздят про мотан, вот и создается впечатление.
#V9JJM2/PDS / @plhk --> #V9JJM2/FHT / 4478 дней назад
@plhk Потому что этот самый мотан внезапно красив. И понять это способен даже такой двоечник, как я.
#V9JJM2/A7L / @minoru --> #V9JJM2/PDS / 4478 дней назад
@plhk И что, даже туториалы вроде «Monads in Pictures»[1] не помогают?  1. http://newartisans.com/2012/08/monads-in-pictures/
#V9JJM2/0J3 / @minoru --> #V9JJM2/5O0 / 4478 дней назад
@minoru Этот я пока не читал. Читал тот, что в LYAH. Спасибо.
#V9JJM2/4U0 / @plhk --> #V9JJM2/0J3 / 4478 дней назад
@plhk В LYAH то же самое, только более развёрнуто и без картинок, кстати говоря. И там всё отлично описано, я не знаю, что за вопросы ты себе задаешь, раз даже после книги не понял монады.
#V9JJM2/4VX / @minoru --> #V9JJM2/4U0 / 4478 дней назад
@minoru Ну я тупой наверное просто.
#V9JJM2/CI1 / @plhk --> #V9JJM2/4VX / 4478 дней назад
@plhk …Или таки ищешь в монадах какого-то высшего смысла. Не пробовал на haskell@cjr поспрашивать, правильно ли понимаешь? Олсо, есть мнение, что достаточно понимания концепции монад на уровне «тайпкласс с bind и return», а дальше лучше посвятить время изучению конкретных экземпляров (List, Reader, Writer, State etc.)
#V9JJM2/SNP / @minoru --> #V9JJM2/CI1 / 4478 дней назад
@minoru Ну проблема частично в том, что я не систематически занимаюсь и не применяю на практике. Почитал про функторы, когда через неделю читаю про монады, большая часть уже из головы вылетела. Надо просто выделить время, сесть и позадрачивать.
#V9JJM2/SGU / @plhk --> #V9JJM2/SNP / 4478 дней назад
@minoru А что там изучать, лол? Обычная абстракция, ничего сложного. На haskell@, кстати, тоже почти повсеместно это заблуждение про матан, так что не советовал бы.
#V9JJM2/ZBN / @anonymous --> #V9JJM2/SNP / 4478 дней назад
@kagami Изучать поведение bind ([1..10] >>= return . (+1), Just 1 >>= (\x -> Nothing >>= (\y -> return $ x + y)) etc.), а также функции, специфичные для конкретных монад (put/get, tell etc.)
#V9JJM2/ZWH / @minoru --> #V9JJM2/ZBN / 4478 дней назад
@minoru Я не понял что они делают, например.
#V9JJM2/OXV / @goren --> #V9JJM2/ZWH / 4478 дней назад
@goren Кто «они»?
#V9JJM2/01N / @minoru --> #V9JJM2/OXV / 4478 дней назад
@minoru bind ([1..10] >>= return . (+1)
#V9JJM2/4MF / @goren --> #V9JJM2/01N / 4478 дней назад
@minoru Вместо (\y -> return $ x + y) можно return . (+x) :3
#V9JJM2/RNG / @anonymous --> #V9JJM2/ZWH / 4478 дней назад
@goren Для этого открываем документацию к Control.Monad, ищем instance Monad [], читаем определение >>=: m >>= k = foldr ((++) . k) [] m foldr ((++) . k) [] - это map k. То есть [1..10] >>= return . (+1) сделает map (+1) [1..10]. Короче, в случае со списками bind — это простой map. Для Maybe ещё проще: наткнувшись на Nothing, bind вернёт его же, ничего не вычисляя.
#V9JJM2/481 / @minoru --> #V9JJM2/4MF / 4478 дней назад
@minoru Неа. Nothing это конструктор монады, поэтому мы можем его возвращать (также как и Just a). А return = Just.
#V9JJM2/8F6 / @anonymous --> #V9JJM2/481 / 4478 дней назад
@kagami Я разве сказал, что мы не можем возвращать Nothing? Про return ничего не говорил, там, как и в случае со списком, всё очеивдно.
#V9JJM2/AWC / @minoru --> #V9JJM2/8F6 / 4478 дней назад
@minoru Так он не наткнувшись на Nothing вернёт его же. (>>=) вообще ничего про Nothing не знает, он знает только то, что результатом функции должна быть та же монада.
#V9JJM2/9SB / @anonymous --> #V9JJM2/AWC / 4478 дней назад
@kagami > (>>=) вообще ничего про Nothing не знает Пардон? Читаем сорец Data.Maybe: (Just x) >>= k = k x Nothing >>= _ = Nothing
#V9JJM2/L9H / @minoru --> #V9JJM2/9SB / 4478 дней назад
@minoru Я думал, что ты имеешь ввиду Nothing справа. Слева-то да.
#V9JJM2/INC / @anonymous --> #V9JJM2/L9H / 4478 дней назад
@kagami Nothing справа от bind? O_O Неплохо тебя переклинило :)
#V9JJM2/1K9 / @minoru --> #V9JJM2/INC / 4478 дней назад
@minoru А что здесь странного? Prelude> Just 1 >> Nothing Nothing
#V9JJM2/5E3 / @anonymous --> #V9JJM2/1K9 / 4478 дней назад
@kagami (>>) — это не bind же!
#V9JJM2/M0Y / @minoru --> #V9JJM2/5E3 / 4478 дней назад
@minoru Ну Just 1 >>= const Nothing, ёпт, разница-то.
#V9JJM2/YZO / @anonymous --> #V9JJM2/M0Y / 4478 дней назад
@minoru Я так и подумал, только слово bind меня смутило. Что bind в общем случае делает?
#V9JJM2/1WT / @goren --> #V9JJM2/481 / 4478 дней назад
@goren bind :: Monad m => m a -> (a -> m b) -> m b
#V9JJM2/AYB / @plhk --> #V9JJM2/1WT / 4478 дней назад
@goren Берёт значение, обёрнутое в какую-то монаду, достаёт его оттуда, скармливает функции, которая возвращает нам ещё какое-то значение, тоже обёрнутое в монаду. Это значение bind и возвращает.
#V9JJM2/VDR / @minoru --> #V9JJM2/1WT / 4478 дней назад
@minoru Проще так обяснить :3
#V9JJM2/W9H / @anonymous --> #V9JJM2/VDR / 4478 дней назад
@kagami Тогда пришлось бы ещё выяснять, что такое action, и почему в первом аргументе оно выглядит как значение, а во втором — как функция. А ещё лично у меня от слова action сразу ассоциации с IO.
#V9JJM2/G4K / @minoru --> #V9JJM2/W9H / 4478 дней назад
@minoru Ты ещё скажи, что пришлось бы объяснять что такое forall -_-
#V9JJM2/XP7 / @anonymous --> #V9JJM2/G4K / 4478 дней назад
@minoru Поправка: foldr ((++) . k) [] — это concatMap k, а не просто map. Так должно быть потому, что k :: a -> m b, то есть в нашем случае a -> [b], а результат bind тоже должен быть [b], так что нужен concat.
#V9JJM2/PI3 / @minoru --> #V9JJM2/481 / 4477 дней назад
сука, такой тред проебал
#V9JJM2/ORK / @ninesigns / 4474 дня назад
@4da Нет я.
#V9JJM2/BSN / @ndtimofeev --> #V9JJM2/ORK / 3544 дня назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.