Чтобы добавлять сообщения и комментарии, .

@ndtimofeev:
ndtimofeev

chrisstucchio.com

@vt:
vt

Я раньше писал, что мне монады в одно ухо влетают, в другое вылетают, несмотря на все мои честные попытки понять. Теперь я окончательно понял — монада — это БИЛДЕР в терминологии для индусов. Я раньше пытался вникнуть, типа это новое веяние в программировании, но нет. Гоните адептов монады, насмехайтесь над ними, это билдер всего лишь! Не дайте скрыть правду!

@ndtimofeev:
ndtimofeev

ndtimofeev.github.io — Пытаюсь прикостылять MonadCatch и MonadMask к Managed. Пока докостылялся до этого.

@ndtimofeev:
ndtimofeev

godoc.org

@ndtimofeev:
ndtimofeev

Астрологи объявили месяц этого самого. gist.github.com — я здесь где-то злостно нарушаю монадические законы?

@ndtimofeev:
ndtimofeev

hackage.haskell.org — а есть такой только с перламутровыми пуговицами? Во-первых я не уверен что мне нужен дамп вычисления на диске. Достаточно вообще говоря словить в ghci UserInterrupt и потом восстановится из какой-нибудь переменной. Во-вторых ну должны быть какие-то более общие решения задачи возврата к исполнению после фейла. В-третьих этот пакет выглядит немного наркоманским…

@Macil:
Macil

Блять, чуваки! Прежде чем постить всякую хуету по монадам сюда или в РуЛямбду, проникнитесь.
Любой «туториал по монадам» есть официальный кандминимум на высокое звание хаскелиста-нуба. Типо как сертификат уровня A1 по языкам. Даже еще меньше, ибо обладатель A1 может вполне нихуёво так общаться, а вот автор туториала по монадам не может вообще нихуя. НИ-ХУ-Я!

Раскрытие «ошибок» туториалов по монадам в очередном туториале по монадам, это как бы сказать... В общем, единственная «ошибка» исключительно в том что оба аффтора не удосужились промахнуться мимо кнопки Post, что весьма печально.

И да, чтоб два раза не вставать: практически всё что написано по хаскелю десяток лет назад — жуткий наивняк. Даже слёзы наворачиваются от умиления, когда читаешь. Исключение, конечно же, составляют «инфраструктурные» научные статьи, но а) не всё реализовано так как там написано; б) уже несколько раз перекроено/расширено, т.е. оно исключительно для тонких ценителей. Даже далеко не все 5-летние заметки/блогпосты можно читать, а уж старше 10-лет... Можно не читать по-умолчанию. «Несколько лет», в мире хаскеля, это много. Имейте и это, блять, в виду прежде чем своими кавалерийскими наскоками [вырезано цензурой].

@ndtimofeev:
ndtimofeev

Случайно наткнулся на #1954577. Ничего не изменилось. Правда с Iteratee и LogicT я разобрался, но теперь я не понимаю monad-free, monad-unify и monad-dijkstra.

@LordFenring:
LordFenring

В одном темном-темно хелпере энтерпрайзного дотнет продукта живет монада maybe. Увидел-офигел. Вот вам и победа функциональщины.

@ndtimofeev:
ndtimofeev

Для того чтобы мир продолжал существовать, я традиционно должен не понимать какую-нибудь монаду. Раньше это была монада IO, затем Reader и Writer, а теперь Iteratee и вот эта hackage.haskell.org штука. Что характерна, к обоим приложено по статье, но я всё равно их не понимаю.

@ndtimofeev:
ndtimofeev

Вот какого хрена какой-то абстрактный Monad не является одновременно и Functor'ом? Не знаю что уродливее: (Monad m, Functor m) => … или >>= return.

@ndtimofeev:
ndtimofeev

gist.github.com — есть вот такая State-подобная монада. Я правильно понимаю, что растащить её на StateT и что-то там не удастся?

@ndtimofeev:
ndtimofeev

Есть страшная монада вида StateT a [] b. Каждая функция в этой монаде порождает множество состояний (a,b) и каждая последующая функция применяется к каждому из этих состояний. Всё бы ничего, но runStateT хочет на вход начальное состояние. Одно. А у меня их до жопы. Придумал хак, решающий эту проблему, но хочется чего-то элегантного.

@ndtimofeev:
ndtimofeev

Пусть у нас есть очень полиморфный concatMap :: (a -> c b) -> c a -> c b где c — какой-то класс контейнеров. Как с минимальными ограничениями для класса c получить concatMapM :: Monad m => (a -> m (c b)) -> c a -> m (c b)?

@ndtimofeev:
ndtimofeev

Вчера написал велосипед для запросов в YAML. День прошёл под знаком «А я люблю обмазываться несвежим паттерн-матчингом и дрочить». Под вечер решил всё переделать. Утро прошло под девизом «Любую проблему можно решить при помощи достаточно толстого стека монадных трансофрмеров». Получилось что-то вроде комбинаторов парсеров. Завтра надо будет попробовать использовать для тех же целей ParsecT и не страдать фигнёй.

@ndtimofeev:
ndtimofeev

Рассмотрим некое множество монадных трансформеров вида newtype T m a = T { runT :: m (SomeThing a) }. Допустим он имеет инстанс в MonadPlus, то есть для него есть такое mzero, что mzero >>= f = mzero и m >> mzero = mzero. Отличить это mzero от любого другого значения можно лишь по значению типа SomeThing a (про m мы ничего не знаем, а T вообще фикция), а что либо делать с ним я могу только в монаде m. Теперь предположим что m тоже MonadPlus. Предположим, что при связывание (val >> mzero) :: T m a (которое должно нам дать в итоге mzero :: T m a) внутри val находится mzero :: m (SomeThing a). Поскольку внутри инстанса бинда для трансформера вычисления происходят внутри монады m, то какова бы ни была логика связывания монады T, вместо этого мы передадим дальше mzero :: m (SomeThing a). Если каким-то чудом (а чудеса мы не рассмтриваем) не справедливо равенство T (mzero :: m (SomeThing a)) == mzero :: T m a, то для T не выполняется закон m >> mzero = mzero и он не MonadPlus. Как-то так.

@ndtimofeev:
ndtimofeev

Прочитал #1740132 и распонял монаду IO.

@ndtimofeev:
ndtimofeev

Необходимо сравнить две сущности одного типа. Признаков их различия (с использованием и без использования IO) довольно много и они перебираются по мере удорожания (сравнивать надо часто) в надежде поэкономить время. Получил лесенку из if'ов. Не понравилось. Додумался до того что это очень напоминает монаду Either где Left — это результат сравнения, а Right — данные для следующего сравнения. Но нужен IO, а значит нужен трансформер. Поискал уже готовый трансформер. Им само собой оказался ErrorT. Задумался…

@ndtimofeev:
ndtimofeev

«…How do I extract the IO out of IO String?…»

@waterlaz:
waterlaz

telofy.soup.io

@ndtimofeev:
ndtimofeev

IO это всего лишь контейнер для лицимерия.