
kir
19.07.2017
18:13:08
Для понимания монад советую сесть и реализовать State, Reader, Writer руками.

Max
19.07.2017
18:13:33
Это не понимание. Это реализация.

Leonid
19.07.2017
18:13:42
вот поэтому люди на работе пишут на Го и плачут (или на скале, и рыдают). а на хаскеле только дома шуточки шутят

Denis
19.07.2017
18:13:58
кстати в программировании только эндофункторы

Google

Max
19.07.2017
18:14:10
И как говорят, сводить общее к частному грешновато

Index
19.07.2017
18:14:13
Да ладно? Вот это история

kir
19.07.2017
18:14:16
Я начал с реализации, а потом получил и понимание.

Denis
19.07.2017
18:14:26
а вот чтобы стать монадой надо к эндофунктору добавить 2 натуральных преобразования pure, join

Index
19.07.2017
18:14:42
В программировании!

That Guy
19.07.2017
18:14:52

Denis
19.07.2017
18:14:55
в хаскелл?

Max
19.07.2017
18:14:58
Ну вот одно из реализаций - вычисление с состоянием, за что меня и загнобили ))

Denis
19.07.2017
18:15:12

Index
19.07.2017
18:15:16
> Готов сходу сформулировать определение категориального моноида?
Ну диаграммы, которые должны коммутировать, не нарисую, а так да

Leonid
19.07.2017
18:15:16
поясните мне за monad-logger лучше. мне таки его в своё окружение в ридере всунуть или как трансформер использовать?

Index
19.07.2017
18:15:35
пример в студию
класс называется Contravariant, это функтор из Hask в Op(Hask)

Google

kir
19.07.2017
18:15:38
В общем-то, монады не сложнее Promise из js, да простят меня здесь сидящие.

Index
19.07.2017
18:15:43
самый тривиальный пример
или там Bifunctor, из Hask*Hask в Hask

Denis
19.07.2017
18:16:03

Index
19.07.2017
18:16:47
Хочется чтобы совсем не Hask было, возьми кайнды отличающиеся от *
И GADT-ы
Например, rmap из vinyl

kir
19.07.2017
18:18:44
Leonid newtype LoggingT m a же, суй в стек трансформеров. Ты же не хочешь методы class MonadLogger руками реализовывать, вынимая его потроха из ReaderT env?

Leonid
19.07.2017
18:19:23
ну обычно я так и делаю. там в потрохах будет только функция одна

kir
19.07.2017
18:22:13
Leonid Но... зачем? Если у тебя какая-то конкретная монада, а не набор из (MonadLogger m, MonadError E m, MonadIO m) => ... в каждом методе, то лучше будет сунуть в стек. У GHC внутри есть спецоптимизации для стеков трансформеров.

That Guy
19.07.2017
18:24:05

Dmitry
19.07.2017
18:27:41
Монада это тайпкласс. Расходимся.

Vasiliy
19.07.2017
18:29:01

Igor
19.07.2017
18:29:07

Dmitry
19.07.2017
18:29:30
Они все равно не проверяются

That Guy
19.07.2017
18:30:01

? animufag ?
19.07.2017
18:30:20
значит тайпклассы могут хранить состояние
А чего их понимать? Монада - это просто цепочка вычислений с состоянием. ))
Монада это тайпкласс. Расходимся.

Leonid
19.07.2017
18:30:21
kir ну как-то не люблю я длинные стеки. долгое время в трансформерсах не было инлайнов, например

Google

Vasiliy
19.07.2017
18:31:07

Index
19.07.2017
18:32:13
Жги
В категории C с тензорным произведением * и нейтральным элементом произведения 1, имеем моноидальный объект M если существуют морфизмы
mu : M*M -> M
eta : 1 -> M
такие, что (рисуем диаграммы)

kir
19.07.2017
18:33:12
В Agda-то законы проверяются (хорошо, что я на ней не пишу)

Index
19.07.2017
18:33:47

Denis
19.07.2017
18:33:56

Мерлин
19.07.2017
18:34:10
Имхо лучшее объяснение монад >_>
https://stackoverflow.com/questions/2704652/monad-in-plain-english-for-the-oop-programmer-with-no-fp-background

Index
19.07.2017
18:34:23
mu и eta в категории эндофункторов дают "нат преобразования из монады"
join и return, то есть

Denis
19.07.2017
18:35:23
это я знаю

That Guy
19.07.2017
18:36:31

kir
19.07.2017
18:37:19
А, собственно, какое определение монады нужно - операционное, решаемые задачи или что?

kana
19.07.2017
18:37:39
Шоб в голове прояснилось

Leonid
19.07.2017
18:37:48
/r/imverysmart

kir
19.07.2017
18:38:05
Promise в жаваскрипте видел?

Index
19.07.2017
18:38:09
> определить слова "категория с тензорным произведением" (aka произнести слова "моноидальная категория")
Ты просто название дал
> определить тензорное произведение функторов
Compose
> вспомнить, что морфизмы функторов — это их естественные преобразования
Конечно
> мотивировать диаграммы (они же не с потолка взялись)
Дают ассоциативность и нейтральный элемент
> и ты по-прежнему примерно никак не поможешь новичку,
Я и не пытался. Новичку ни к чему понимать монады

kana
19.07.2017
18:38:22
Не, мне объяснять не нужно)

kir
19.07.2017
18:38:33
Так вот - Promise можно назвать монадой, с некоторой натяжкой.

Denis
19.07.2017
18:38:42

Index
19.07.2017
18:38:45
Да

Google

Vasiliy
19.07.2017
18:39:34
по-моему, в js у промисов then - это fmap и bind в одном лице

Leonid
19.07.2017
18:39:57
чуваки с двача с /pr/ сюда заходят такие "Ой, а поясните монады" а потом хихикают

Denis
19.07.2017
18:39:59
по-моему в js это кусок говна
в js уж есть task,future например fluture библиотека

Дмитрий
19.07.2017
18:40:31
В js есть Future
Да, не успел)

Vasiliy
19.07.2017
18:40:50
можно сократить до "js это кусок говна" :D

Max
19.07.2017
18:40:58
Хм. Что только не сделают, лишь бы на колбеках не писать ))

Дмитрий
19.07.2017
18:40:58
Промисы не до конца корректно всё имплементируют, поэтому о них смысла разговаривать мало

Denis
19.07.2017
18:40:58
тоже вариант

Admin
ERROR: S client not available

Denis
19.07.2017
18:41:14
промисы это не ленивая ранняя срань

Дмитрий
19.07.2017
18:41:39

kir
19.07.2017
18:42:36
Ой, а на js можно сделать чтоб было лениво и не в 100 раз медленнее? Пока в webassembly call/cc не добавят и STG не реализуют, все под веб так и будут писать не-лениво.
А, да, GHCjs

Дмитрий
19.07.2017
18:42:56
Следующий вопрос

Vasiliy
19.07.2017
18:43:02

kir
19.07.2017
18:43:11
Link, please?
На быстрый ленивый js

Google

Дмитрий
19.07.2017
18:43:32

kir
19.07.2017
18:44:10
Хмм. А Idris с какого перепугу ленивым стал?

Vasiliy
19.07.2017
18:44:28
ну а ghc компилится в ассемблер, от этого ассемблер не становится лучше

Дмитрий
19.07.2017
18:44:45

Max
19.07.2017
18:44:57
А в итоге там битики, пацаны...
И физика...

Дмитрий
19.07.2017
18:45:17
Это не rocket sience, чтобы такой чепухой в 2017 в тупик ставить
Найдите новый объект для хейта и новую идею для каверзных вопросов

kir
19.07.2017
18:46:17
Меня ленивый js (либами он ленивый или как) интересует с практической точки зрения - как compilation target. А то написанный мной недо-STG чуток медленноват.

Vasiliy
19.07.2017
18:46:59
есть один объект - пыхтон
>>> False == False in [False]
True

Denis
19.07.2017
18:47:36
интересно во что генерится лень из purescript

Дмитрий
19.07.2017
18:47:54

kir
19.07.2017
18:47:56
Пурскрипт не ленивый, лол

Denis
19.07.2017
18:48:08
https://github.com/purescript/purescript-lazy

kir
19.07.2017
18:48:27
foreign import data Lazy :: Type -> Type

Denis
19.07.2017
18:48:28

kir
19.07.2017
18:48:41
А сам он вполне агрессивно выполняющийся

Aragaer
19.07.2017
18:48:47

Denis
19.07.2017
18:48:53

Index
19.07.2017
18:49:17
Я не вижу где в этом purescript-lazy вообще sharing.

Vasiliy
19.07.2017
18:49:21