Size: a a a

2020 June 11

t

toriningen in rust_offtopic
Теперь вопрос — нахуя это все? А затем, что используя ту же самую логику ("сделай что-то, верни обернутое значение и передай результат дальше по цепочке") можно абстрагировать очень большое количество других видов вычислений. Например, пусть наша монада не IO, а ListIO (я ее только что изобрел). Как будет выглядеть программа? Да почти так же!

declare function inputM(): ListIO<int>;
declare function printM(value: ...): ListIO<Void>;

main = (_: Void) => do
   a <- inputM()
   b <- inputM()
   c <- a + b
   printM(c)
   printM("свинья^W монады охуенная тема")

do
   main()
   printM("Ну вот и посчитали!")
источник

t

toriningen in rust_offtopic
В чем разница? Мы придумали так, что ListIO работает не с отдельными значениями, а со спектром значений. Поэтому inputM возвращает не одно значение, а любое количество, а printM печатает не одно число, а сразу дохуя. Как это будет выглядеть?

> 10,100,1000,10000
> 20,200
30,210,120,300,1020,1200,10020,10200
свинья^W монады охуенная тема
Ну вот и посчитали!
источник

t

toriningen in rust_offtopic
Т.е. программа осталась той же, а логика работы поменялась. Вот эта логика (что делать со значением типа a + b, как передать значение дальше по цепочке) и есть основа монады. Мы могли бы сдлать что-то вообще такое:

declare function inputM(): Promise<int>;
declare function printM(value: ...): Promise<Void>;

main = (_: Void) => do
   a <- inputM()
   b <- inputM()
   c <- a + b
   printM(c)
   printM("свинья^W монады охуенная тема")

do
   main()
   printM("Ну вот и посчитали!")
источник

t

toriningen in rust_offtopic
И теперь общение с программой может выглядеть вот так:

> 10
   (...прошло полчаса)
> 20
   (...еще час)
30
   (...пару секунд)
свинья^W монады охуенная тема
   (...три месяца ожидания)
Ну вот и посчитали!
источник

AZ

Alex Zhukovsky in rust_offtopic
можно было просто сделать форвард
источник

t

toriningen in rust_offtopic
(пока все)
источник

t

toriningen in rust_offtopic
Alex Zhukovsky
можно было просто сделать форвард
я писал в десктопном приложении
источник

AZ

Alex Zhukovsky in rust_offtopic
toriningen
И теперь общение с программой может выглядеть вот так:

> 10
   (...прошло полчаса)
> 20
   (...еще час)
30
   (...пару секунд)
свинья^W монады охуенная тема
   (...три месяца ожидания)
Ну вот и посчитали!
АГА, ЗНАЧИТ ХАСКЕЛЬ НЕЧИСТЫЙ!!
источник

t

toriningen in rust_offtopic
Alex Zhukovsky
АГА, ЗНАЧИТ ХАСКЕЛЬ НЕЧИСТЫЙ!!
конечно нечистый. а вот C чистый функциональный
источник

AZ

Alex Zhukovsky in rust_offtopic
так и знал
источник

DF

Dollar Føølish in rust_offtopic
Ты либо очень быстро печатаешь либо безработный
источник

DF

Dollar Føølish in rust_offtopic
Кек
источник

DF

Dollar Føølish in rust_offtopic
Столько текста за 1 день
источник

t

toriningen in rust_offtopic
Dollar Føølish
Ты либо очень быстро печатаешь либо безработный
why not both
источник

t

toriningen in rust_offtopic
Piu Piu
что такое монада можно пояснение [2]
источник

V

Vabka in rust_offtopic
Лол. Играю в прей и тут раст
источник

V

Vabka in rust_offtopic
источник

DF

Dollar Føølish in rust_offtopic
Што такое прей
источник

CM

Chingiz Mamiyev in rust_offtopic
Dollar Føølish
Што такое прей
Игра какая-то
источник

PP

Piu Piu in rust_offtopic
так понятно на частных примерах понятно что такое монада. но вообще определение более глубокая и абстрактная.
источник