Size: a a a

2020 May 15

AV

Alexander Vershilov in fprog_spb
Или функция может вернуть много результатов
источник

AV

Alexander Vershilov in fprog_spb
Или делает I/O
источник

AV

Alexander Vershilov in fprog_spb
Такие функции, назову их действиями
источник

АГ

Александр Гранин... in fprog_spb
Монада - это когда ты можешь связать две функции, делающие некоторый сайд-эффект. У каждой монады это связывание свое
источник

AV

Alexander Vershilov in fprog_spb
И один умный человек придумал, как выражать их в типах
источник

AV

Alexander Vershilov in fprog_spb
Он говорит, а возьмём и скажем, что у функции результат не тип A, а тип M A
источник

AV

Alexander Vershilov in fprog_spb
где это самое M описывает тот эффект который может произойти
источник

AV

Alexander Vershilov in fprog_spb
А дальше у тебя есть функция, нормальная чистая f :: A -> B и есть результат M A и нужно научиться их связать
источник

AV

Alexander Vershilov in fprog_spb
т.е. как-то передать M A в f
источник

AV

Alexander Vershilov in fprog_spb
А потом нужно будет связать 2 такие функции f :: A -> M B и g :: B -> M C
источник

AV

Alexander Vershilov in fprog_spb
И оказалось, что эта штука позволяющая их связать, в терминах программистов интерфейс, описывается математическим термином "монада"
источник

AV

Alexander Vershilov in fprog_spb
С тех пор и пошло
источник

AV

Alexander Vershilov in fprog_spb
(я тут упустил интересные моменты, но и так слов уже слишком много)
источник

AV

Alexander Vershilov in fprog_spb
Так что да, как тут дважды сказали, интерфейс это способ связать 2 такие действия
источник

AV

Alexander Vershilov in fprog_spb
Причем способ обобщенный, т.е. для каждого конкретного сайд эффекта он разный
источник

AV

Alexander Vershilov in fprog_spb
И реализация инстанса Monad для конкретного M этот способ определяет
источник

AV

Alexander Vershilov in fprog_spb
А дальше примеры если только 🙂
источник

AI

Andrey Ivanov in fprog_spb
Alex Shipilov
Например в вебе, я получаю данные, обрабатываю, кладу в базу, по запросу дергаю, отдаю юзеру и в случае кложи это как правило мапа или массив мап и на входе и на выходе и даже в базе. Есть валидация на входе, которая отсекает не валидные данные, есть тесты, есть аннотации типов, но это скорее как помощь компилятору, а не обязанность. Теперь вопрос, где в этом потоке требуются типы и что они дают/какую ценность добавляют, и чем приходиться за это платить?
источник

AS

Alex Shipilov in fprog_spb
пытаюсь въехать) не знаком с синтаксисом хаскеля)
f :: A -> B как правильно прочитать f принимает Тип A возвращает тип B ?
источник

AV

Alexander Vershilov in fprog_spb
Да
источник