Size: a a a

2020 February 06

P

Pavel in rust_offtopic
Alex Zhukovsky
но не уверен что стринга в рандомном формате это хороший вариант
вроде есть стандарт для стрингов с таймзоной
источник

AZ

Alex Zhukovsky in rust_offtopic
можно отменять эффекты, например вызвать функцию print а потом выкинуть результат, вместе с самим фактом что мы что-то принтили. Назад во времени это так не работает
источник

λ

λоλторт in rust_offtopic
Stanislav Popov
начал смотреть перед сном fp to the max . ничерта не понял зачем он в монаду оборачивает все
Ссылочная прозрачность, локал ризонинг
источник

SP

Stanislav Popov in rust_offtopic
Alex Zhukovsky
например ты можешь вместо IO передать айди монаду, и тестировать сетевое взаимодействие без моков
ну а мог бы просто передать интерфейс/обьект с теми же методами другой
источник

AZ

Alex Zhukovsky in rust_offtopic
Stanislav Popov
ну а мог бы просто передать интерфейс/обьект с теми же методами другой
э нет, так не работает
источник

AZ

Alex Zhukovsky in rust_offtopic
например ты не можешь у одного интерфейса сделать два наследника, один из которых синхронный а другой - нет
источник

AZ

Alex Zhukovsky in rust_offtopic
в ООП ты сделаешь асинхронный который типа шире, а в синхронном варианте будешь писать везде Task.FromResult или подобное в другом япе
источник

AZ

Alex Zhukovsky in rust_offtopic
точнее тут не оопэшность сама по себе, а отсутствие хкт в распространенных языках, но проблема по факту есть
источник

AZ

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

AZ

Alex Zhukovsky in rust_offtopic
mapM/filterM как самые полезные
источник

P

Pavel in rust_offtopic
Alex Zhukovsky
в ООП ты сделаешь асинхронный который типа шире, а в синхронном варианте будешь писать везде Task.FromResult или подобное в другом япе
или сделаешь две иерархии -- синхронную и асинхронную
источник

AZ

Alex Zhukovsky in rust_offtopic
если ты вспомнишь мою статью про хаскель вс го, я там взял либу которая юзает аппликатив + траверсабл
источник

AZ

Alex Zhukovsky in rust_offtopic
если у тебя нет их я взыке, то и либы не будет
источник

P

Pavel in rust_offtopic
не обязательно иерархии, но апи будут разными, скорее всего
источник

AZ

Alex Zhukovsky in rust_offtopic
Pavel
или сделаешь две иерархии -- синхронную и асинхронную
тебе не надо две иерархии, тебе надо в один метод передать ту или иную реализацию
источник

P

Pavel in rust_offtopic
Alex Zhukovsky
тебе не надо две иерархии, тебе надо в один метод передать ту или иную реализацию
ты ща про асинхронность, или про отсутствие блокировки?
источник

AZ

Alex Zhukovsky in rust_offtopic
Pavel
не обязательно иерархии, но апи будут разными, скорее всего
я могу написать

foo :: Int -> Int -> m Int

И дальше:

1. вызвать это с Par - получить параллельность
2. вызвать с Async - получить асинхронность
3. вызвать с Either - получить возможность обработать ошибку
4. вызвать с Id - выполнить операцию без эффектов
источник

AZ

Alex Zhukovsky in rust_offtopic
+ любые комбинации, например асинк с ошибкой
источник

P

Pavel in rust_offtopic
Alex Zhukovsky
я могу написать

foo :: Int -> Int -> m Int

И дальше:

1. вызвать это с Par - получить параллельность
2. вызвать с Async - получить асинхронность
3. вызвать с Either - получить возможность обработать ошибку
4. вызвать с Id - выполнить операцию без эффектов
ты говорил про оопшный язык
источник

SP

Stanislav Popov in rust_offtopic
надо чтобы ктото таки показал этот трюк с заменой монады. все ио функции скипаются при этом или как? а если ответ от них нужен?
источник