Vladislav
Да кем угодно можно быть, а монады от этого не стали "вычислениями с состоянием"
Vladislav
Т.е. я понимаю, что у тебя там что-то в голове творится и ты что-то понимаешь про вычисления, но это не монады.
Vladislav
И людей в заблуждение лучше не вводить
Max
"Хер знает, что такое моднады на самом деле, а в нашем богоугодном хаскеле мы считаем их типами с определенным интерфейсом"
Max
А искренне заблуждаться можно?
Max
Или сразу к оскорблениям перейдем? ))
Vladislav
Заблуждения на пустом месте не возникают, вот монада — это моноид в категории эндофункторов, а остальные определения — посредственные аппроксимации.
Max
Вот
Max
Стоп-игра
Max
Начинаем декомпозировать
Max
Что такое эндофунктор?
Vladislav
Это функтор из некоторой категории в себя
Max
Что такое функтор?
Зигохистоморфный
это морфизм между 2категориями
Max
Ага
Vladislav
Это сопоставление одной категории другой. Объекты в объекты, морфизмы в морфизмы, композицию в композицию.
Vladislav
Ну и законы обычные, чтобы композиция не ломалась.
Anonymous
Для понимания монад советую сесть и реализовать State, Reader, Writer руками.
Max
Это не понимание. Это реализация.
Leonid 🦇
вот поэтому люди на работе пишут на Го и плачут (или на скале, и рыдают). а на хаскеле только дома шуточки шутят
Зигохистоморфный
кстати в программировании только эндофункторы
Max
И как говорят, сводить общее к частному грешновато
Vladislav
Да ладно? Вот это история
Anonymous
Я начал с реализации, а потом получил и понимание.
Зигохистоморфный
а вот чтобы стать монадой надо к эндофунктору добавить 2 натуральных преобразования pure, join
Vladislav
В программировании!
Dmitry
Зигохистоморфный
в хаскелл?
Max
Ну вот одно из реализаций - вычисление с состоянием, за что меня и загнобили ))
Зигохистоморфный
Vladislav
> Готов сходу сформулировать определение категориального моноида?
Ну диаграммы, которые должны коммутировать, не нарисую, а так да
Leonid 🦇
поясните мне за monad-logger лучше. мне таки его в своё окружение в ридере всунуть или как трансформер использовать?
Vladislav
пример в студию
класс называется Contravariant, это функтор из Hask в Op(Hask)
Anonymous
В общем-то, монады не сложнее Promise из js, да простят меня здесь сидящие.
Vladislav
самый тривиальный пример
Vladislav
или там Bifunctor, из Hask*Hask в Hask
Зигохистоморфный
Vladislav
Хочется чтобы совсем не Hask было, возьми кайнды отличающиеся от *
Vladislav
И GADT-ы
Vladislav
Например, rmap из vinyl
Anonymous
Leonid newtype LoggingT m a же, суй в стек трансформеров. Ты же не хочешь методы class MonadLogger руками реализовывать, вынимая его потроха из ReaderT env?
Leonid 🦇
ну обычно я так и делаю. там в потрохах будет только функция одна
Anonymous
Leonid Но... зачем? Если у тебя какая-то конкретная монада, а не набор из (MonadLogger m, MonadError E m, MonadIO m) => ... в каждом методе, то лучше будет сунуть в стек. У GHC внутри есть спецоптимизации для стеков трансформеров.
Dmitry
Dmitry
Монада это тайпкласс. Расходимся.
Igor
Dmitry
Они все равно не проверяются
Dmitry
Влод
значит тайпклассы могут хранить состояние
Влод
А чего их понимать? Монада - это просто цепочка вычислений с состоянием. ))
Влод
Монада это тайпкласс. Расходимся.
Leonid 🦇
kir ну как-то не люблю я длинные стеки. долгое время в трансформерсах не было инлайнов, например
Vladislav
Жги
В категории C с тензорным произведением * и нейтральным элементом произведения 1, имеем моноидальный объект M если существуют морфизмы
mu : M*M -> M
eta : 1 -> M
такие, что (рисуем диаграммы)
Anonymous
В Agda-то законы проверяются (хорошо, что я на ней не пишу)
Зигохистоморфный
Мерль
Имхо лучшее объяснение монад >_>
https://stackoverflow.com/questions/2704652/monad-in-plain-english-for-the-oop-programmer-with-no-fp-background
Vladislav
mu и eta в категории эндофункторов дают "нат преобразования из монады"
Vladislav
join и return, то есть
Зигохистоморфный
это я знаю
Anonymous
А, собственно, какое определение монады нужно - операционное, решаемые задачи или что?
кана
Шоб в голове прояснилось
Leonid 🦇
/r/imverysmart
Anonymous
Promise в жаваскрипте видел?
Vladislav
> определить слова "категория с тензорным произведением" (aka произнести слова "моноидальная категория")
Ты просто название дал
> определить тензорное произведение функторов
Compose
> вспомнить, что морфизмы функторов — это их естественные преобразования
Конечно
> мотивировать диаграммы (они же не с потолка взялись)
Дают ассоциативность и нейтральный элемент
> и ты по-прежнему примерно никак не поможешь новичку,
Я и не пытался. Новичку ни к чему понимать монады
кана
Не, мне объяснять не нужно)
Anonymous
Так вот - Promise можно назвать монадой, с некоторой натяжкой.
Зигохистоморфный
Vladislav
Да
Vasiliy
по-моему, в js у промисов then - это fmap и bind в одном лице
Leonid 🦇
чуваки с двача с /pr/ сюда заходят такие "Ой, а поясните монады" а потом хихикают
Зигохистоморфный
по-моему в js это кусок говна
Зигохистоморфный
в js уж есть task,future например fluture библиотека
Дима
В js есть Future
Дима
Да, не успел)