Size: a a a

2020 May 16

KK

Kirill Kaymakov in pro.cxx.holywars
Mikail Bagishov
Ну например, есть функция, которая будет получать либо синхронный источник данных, либо асинхронный. По идее, с помощью монад такую функцию можно сделать просто и эффективно.
Не будет, я просто приму на вход интерфейс
источник

MB

Mikail Bagishov in pro.cxx.holywars
Kirill Kaymakov
Не будет, я просто приму на вход интерфейс
Ну вот как она дальше будет работать?
источник

CC

Chris Calvin in pro.cxx.holywars
Kirill Kaymakov
Не будет, я просто приму на вход интерфейс
функциональный интерфейс ты получать будешь
источник

CC

Chris Calvin in pro.cxx.holywars
если захочешь проще всего
источник

MB

Mikail Bagishov in pro.cxx.holywars
Либо этот интерфейс и будет монадой, конечно
источник

MB

Mikail Bagishov in pro.cxx.holywars
Ну например функция, которая подсчитает количество байт, меньших 128.
источник

KK

Kirill Kaymakov in pro.cxx.holywars
Chris Calvin
если захочешь проще всего
Что будет работать?
источник

G

Gymmasssorla in pro.cxx.holywars
Chris Calvin
Functor, Applicative, Monad, Kleisli etc
В новом C# вроде можно: https://habr.com/en/post/490112/
источник

G

Gymmasssorla in pro.cxx.holywars
(Там внизу ещё есть аргументация по поводу монад)
источник

MB

Mikail Bagishov in pro.cxx.holywars
И вообще, как от монад перешли к ФП?
источник

KK

Kirill Kaymakov in pro.cxx.holywars
Аля
public T WTF<T>(IWTFReader<T> reader)
{
     T answer = new T();
     while (reader.IsEnd())
     {
           T element = reader.Read();
           answer.DoSmth(element);
     }
     return answer;
}
источник

MB

Mikail Bagishov in pro.cxx.holywars
Kirill Kaymakov
Аля
public T WTF<T>(IWTFReader<T> reader)
{
     T answer = new T();
     while (reader.IsEnd())
     {
           T element = reader.Read();
           answer.DoSmth(element);
     }
     return answer;
}
И почему это у асинхронного ридера read() вернет T?
источник

MB

Mikail Bagishov in pro.cxx.holywars
Он вернет например Promise<T>
источник

KK

Kirill Kaymakov in pro.cxx.holywars
Mikail Bagishov
И почему это у асинхронного ридера read() вернет T?
Потому что у него в интерфейсе задано, что он не Task<T> возвращает
источник

KK

Kirill Kaymakov in pro.cxx.holywars
А то что он асинхронен - детали реализации
источник

MB

Mikail Bagishov in pro.cxx.holywars
Kirill Kaymakov
Потому что у него в интерфейсе задано, что он не Task<T> возвращает
Тогда это плохой интерфейс :) Он заставляет делать незирокостные вещи типа переключения стеков, получается.
источник

KK

Kirill Kaymakov in pro.cxx.holywars
И сама асинхронность эвейтится в IsEnd
источник

KK

Kirill Kaymakov in pro.cxx.holywars
Mikail Bagishov
Тогда это плохой интерфейс :) Он заставляет делать незирокостные вещи типа переключения стеков, получается.
А оно по-другому все равно работать не будет
источник

KK

Kirill Kaymakov in pro.cxx.holywars
Там все равно весь бэк в монадах будет контексты чейнджить постоянно
источник

AZ

Alexander Zaitsev in pro.cxx.holywars
Churchill
а тут в дело вступает @zamazan4ik
а, что?
источник