@frp_ru

Страница 106 из 420
andretshurotshka?❄️кде
16.07.2017
10:24:11
лол

illiatshurotshka❄️
16.07.2017
10:24:35
I understand your point, but your methods are slower than it you should be. Complex abstractions, like arrays, sort and reduce are not the best tools for this kind of task. If you want to teach people how to use these methods, you should use an example where these methods are the best way to go.

Google
illiatshurotshka❄️
16.07.2017
10:26:21
это тож из вики?
нет это из r/javascript

Дмитрий
16.07.2017
10:26:36
Обратный случай при этом не уточняется

Vadim
16.07.2017
10:30:45
Короче, если я правильно понял, монада IO решает те же задачи, что делает flatMap в FRP? И, использовать ее стоит только тогда, когда ты не хочешь связываться с FRP-библиотеками?

Дмитрий
16.07.2017
10:31:21
Я вообще Future использую

В стримах у тебя всего один нормально описываемый вариант "течения" событий, в Future — сразу два

Vadim
16.07.2017
10:31:56
Не понял

Про вариант течения событий

Дмитрий
16.07.2017
10:32:38
Promise.reject(0).then( val => Promise.reject( val + 1 ))

Дмитрий
16.07.2017
10:32:53
Да, я тоже про него думал

Но он корректно не типизируется

Потому что Stream<Type>, а Future<Left, Right>

Google
illiatshurotshka❄️
16.07.2017
10:34:02
Stream<Future<L, R>>

ez

Дмитрий
16.07.2017
10:34:15
Про вариант течения событий
Вот пример выше — это перемещение числа по ветке reject. Только он корявый, а в Future вместо него можно просто делать .mapRej

Vadim
16.07.2017
10:34:23
Потому что Stream<Type>, а Future<Left, Right>
Если я правильно помню, в rxjs дженериками описывается и ошибка тоже

Дмитрий
16.07.2017
10:34:51
Там стримы от двух дженериков?

Vadim
16.07.2017
10:35:27
Насколько помню да

В ts

Да и для promise вроде так же

Пока единственную причину использования я вижу - это если действительно тебе просто не хочется связываться с FRP-либами

Хотя этот довод слабый, так как они сейчас довольно модульны обычно

Дмитрий
16.07.2017
10:37:34
Сейчас проверил специально

Такого нет нигде

Вообще

Промисы — от одного дженерика, обсерваблы и стримы тоже

Vadim
16.07.2017
10:39:21
Тогда хреново, да

Дмитрий
16.07.2017
10:39:55
Переход от стримов с одним потоком к Futures на двух сопоставим собственно с самим переходом на стримы с обычных структур)

Ещё бы either выбрать нормальный, без него половины фич нет

Vadim
16.07.2017
10:40:42
Из какой либы ты используешь Future?

Дмитрий
16.07.2017
10:40:50
fluture

Ещё бы either выбрать нормальный, без него половины фич нет
А я так и не выбрал нормальный, не самопал со stack overflow :(

Google
Vadim
16.07.2017
10:41:21
И еще, есть ли какие-то полезные юз-кейсы использования именно IO вместо Future?

fluture
Спасибо!

andretshurotshka?❄️кде
16.07.2017
10:42:56
Future для асинхронности

Vadim
16.07.2017
10:43:59
Future для асинхронности
Это довод, спасибо

Как один из плюсов стримов на rxjs мне вспомнилось, что там можно задавать то, где именно будет проводиться ресурсоемкая операция - параллельно или последовательно (next tick).

Дмитрий
16.07.2017
10:47:00
В fluture есть параллельное выполнение

andretshurotshka?❄️кде
16.07.2017
10:47:34
лол

На fluture можно стрим кликов сделать?)

Дмитрий
16.07.2017
10:47:58
Future для асинхронности
Я кстати не делаю разницы. С точки зрения кода это одно и тоже

Vadim
16.07.2017
10:48:06
В fluture есть параллельное выполнение
Исходя из того, что он для асинхронности, думаю это без вариантов )

andretshurotshka?❄️кде
16.07.2017
10:48:20
Да
как)

Дмитрий
16.07.2017
10:48:25
Так же

Vadim
16.07.2017
10:48:46
Я кстати не делаю разницы. С точки зрения кода это одно и тоже
Ну как же? Есть же принципиально последовательные алгоритмы

Дмитрий
16.07.2017
10:51:06
Ну как же? Есть же принципиально последовательные алгоритмы
А как это мешает выполнять эти алгоритмы последовательно?

как)
Там do нотация через генераторы

andretshurotshka?❄️кде
16.07.2017
10:51:59
Так же
Не, разве future может бесконечный стрим сделать?)

Дмитрий
16.07.2017
10:52:19
А стрим через бесконечный Future?

Блин, что за вопросы))

Vadim
16.07.2017
10:52:35
А как это мешает выполнять эти алгоритмы последовательно?
Если он В ЛЮБОМ СЛУЧАЕ выполняет операцию параллельно, то это выбьется из цепочки операций же. Или мы о разном говорим )

Google
Дмитрий
16.07.2017
10:52:42
О разном вообще

Во первых не в любом

Во вторых я вообще не понимаю, что вы мне сейчас пытаетесь предъявить

Смысл не в том, как кастится стрим и future

Vadim
16.07.2017
10:54:21
Ну ладно, я сперва покопаюсь в этих вещах, и только потом, если будут непонятки буду задавать тяжкие вопросы. Пока рано ) А то, может там будет все очевидно )

Дмитрий
16.07.2017
10:54:28
Смысл в том, что в них каждое событие, УЖЕ вызванное форком future или данными в стриме проходит через одну и ту же цепь обработчиков

const yourFutureForInfiniteCast = Future.of( 0 ) Теперь с этим фьючерсом абсолютно так же можно делать .map, chain, flatMap и всё то, что и со стримом

При каждом форке он будет вызываться заново, и каждый раз будет проходиться вся цепьб дальнейших преобразований — аналогия со стримом

Только если у тебя в стриме упала ошибка — то ты должен её поймать и непременно вернуть в основной поток

Admin
ERROR: S client not available

Дмитрий
16.07.2017
10:57:53
Ещё конечно попытавшись типизировать всё это нормально

В future ты можешь работать с ошибками отдельно. Представь, что у тебя сразу два стрима, между которыми можно удобно и наглядно перекидывать данные

Их вообще надо использовать втроём — type BulletProof<L, R> = Stream<Future<Either<L, R>, never>>

andretshurotshka?❄️кде
16.07.2017
11:01:57
Лол

А зачем Either

Ещё конечно попытавшись типизировать всё это нормально
Сделать два стрима, один для ошибок другой для значений и мержить)

Дмитрий
16.07.2017
11:03:01
Оч удобно

Vadim
16.07.2017
11:03:16
Их вообще надо использовать втроём — type BulletProof<L, R> = Stream<Future<Either<L, R>, never>>
А Stream в данном случае это что? Какой-то стрим из FRP-библиотеки? Или такая монада?

Дмитрий
16.07.2017
11:03:24
А если в каждом .chain можно часть событий вернуть в R, а часть — уронить?

Google
Дмитрий
16.07.2017
11:03:42
Это — описание бесконечной цепи асинхронных событий, которые никогда не упадут в reject мимо catch, потому что никогда не падают вообще

Неплохо, да?))

Vadim
16.07.2017
11:04:14
Прикольно! Надо будет покопаться обязательно! )

Дмитрий
16.07.2017
11:04:47
Мне нужен нормальный Either, срочно ? То, что выше — это только начало)

Vadim
16.07.2017
11:05:41
А в sanctuary плох?

Дмитрий
16.07.2017
11:07:11
Ну он жирный, ещё не хватало тащить его рантайм ? Но на его базе и построен fluture-js, так что это как-то решается

Короче — вот у вас есть событие (обычный промис), которое может упасть в catch или зарезолвиться. Вы прячете событие в .fold(Left, Right) — и получаете промис, который никогда не падает, а просто возвращает Either.Left

А так как у нас есть мап и по ошибкам тоже, .mapRej, мы эту *какую-то* ошибку маппим на свои данные const wellTypedEvent = futureEvent .mapRej( error => error instanceof Error ? error : new CustomError('unexpected failure', error) .fold(Left, Right)

Vadim
16.07.2017
11:12:10
А обычные в FRP-стримы ты заворачиваешь для того, что б использовать специфические плюшки FRP-библиотек?

Потому что иначе смысла в обычном стриме не видно

Дмитрий
16.07.2017
11:13:12
frp пока больше всего юзаю, потому что без Either всё тлен Так да, мне кажется число стримов тогда прям радикально сократится

Vadim
16.07.2017
11:15:24
Каких возможностей Either в современных реализациях тебе нехватает?

Дмитрий
16.07.2017
11:18:22
Стабильности (пинок folktale) Легковесности (пинок sanctuary) Уверенности, что это не заброшенный модуль (пинок всем остальным) Stack safe (вообще почти всем)

Vadim
16.07.2017
11:21:12
>> Стабильности (пинок folktale) Local variables referenced from На чем она у них вылетает?

Дмитрий
16.07.2017
11:22:23
Она не вылетает, я вообще думаю, что оно больше всех ок, просто там Result (Either у них) в статусе experimental

А, ну и ещё дико парит что там инстансы — это Either.Ok и Either.Error. Error блин, у меня flow с ума сходит ?

Круче только метод async в most-subject и string в parsimmon ?

Vadim
16.07.2017
11:24:46
Мне для половины библиотек обычно приходится тайпинги кастомизировать

Хотя бы чуть-чуть

Страница 106 из 420