@frp_ru

Страница 38 из 420
Paul
26.02.2017
08:42:55
Единственный вариант — определять какой-нибудь Symbol.fmap на нужном типе (Maybe)

Aleh
26.02.2017
08:43:23
ну тогда сам тип надо определять как нечто существующее в рантайме

Paul
26.02.2017
08:43:59
Разумеется

Google
Aleh
26.02.2017
08:44:26
короче это все попытка притащить в js то, чему тут не очень место на данном этапе

Paul
26.02.2017
08:46:11
Хм. А вот что с flow: https://medium.com/@gcanti/higher-kinded-types-in-flow-275b657992b7#.hdju3vcag

Aleh
26.02.2017
08:46:12
хотя в данном случае можно определить на Nothing и на Just

Paul
26.02.2017
08:46:52
хотя в данном случае можно определить на Nothing и на Just
Ну, я думаю всё же правильнее строить Nothing и Just как подкласс Maybe

Aleh
26.02.2017
08:48:22
ну да, если мы хотим добавлять операции далее, из апликативных функторов, из монад, то нам нужна конкретная сущность Maybe

Paul
26.02.2017
08:56:21
а как ATC тут поможет?
Как-то так: http://smallcultfollowing.com/babysteps/blog/2016/11/09/associated-type-constructors-part-4-unifying-atc-and-hkt/

Aleh
26.02.2017
08:56:47
ну это вроде читал

Paul
26.02.2017
08:58:58
Ну.. вот как эмулировать можно: https://gist.github.com/14427/af90a21b917d2892eace

Но я всё равно считаю, что подход с тем, чтобы делать fmap/>>=/etc через, скажем, итератор лучше.

Ну, т.е. есть типаж Iterator<Item=T> на котором есть все эти методы. Далее типаж реализуется для нужной коллекции уже. Эффект такой же, но HKT не нужны

Aleh
26.02.2017
09:01:44
блин, я чет и не знал, что в расте так развита система типов

ты мне вот в предыдущий раз глаза открыл)

Google
Paul
26.02.2017
09:01:58
Ну, т.е. вот так https://doc.rust-lang.org/std/iter/trait.Iterator.html

Ну.. вот как эмулировать можно: https://gist.github.com/14427/af90a21b917d2892eace
С macros 1.1 (Rust >=1.15) можно запилить derive(HKT) и будет что-то вроде: #[derive(HKT)] enum Maybe<T> { Just(T), Nothing } Практически HKT в языке. Соб-но, потому разрабы и против сабжа, чтобы не усложнять

Vasiliy
26.02.2017
17:11:58
а как в рамде типа eqProps, только eqPaths?

хм, module.exports = _curry3(function eqProps(prop, obj1, obj2) { return equals(obj1[prop], obj2[prop]); }); ну можно по типу pathEq сделать по аналогии: module.exports = _curry3(function pathEq(_path, val, obj) { return equals(path(_path, obj), val); }); хотя оказалось что мне это не надо)

Дмитрий
26.02.2017
17:18:52
Vasiliy
26.02.2017
17:19:18
о, прикольно) спасибо

andretshurotshka?❄️кде
28.02.2017
11:56:20
тишина такая :)

Boris
28.02.2017
18:23:47
на меннинге dotd отличный

https://www.manning.com/dotd

Denis
01.03.2017
12:54:42
Сюда: @python_jobs, @php_jobs, @nodejs_jobs

andretshurotshka?❄️кде
08.03.2017
20:40:40


?

Дмитрий
08.03.2017
20:41:59
протестанты в моём жс

вместо абрамоугодности используют штальцесовместимость

andretshurotshka?❄️кде
08.03.2017
20:43:57
?

Сергей
09.03.2017
07:35:57
Аватарка чата гуд

andretshurotshka?❄️кде
09.03.2017
10:00:56
ну правда чат не совсем по js )

aodzaki.toko
09.03.2017
10:01:19
И не совсем радужный

Ilya
09.03.2017
10:02:43
Функционально-реактивные подходы в JS/TS. RxJS, Cycle.js, Ramda, etc.

Это пиннед, даже.

Google
Ilya
09.03.2017
10:03:23
Надо наверное или пиннед поменять, раз уже не жс, или аватарку. (или забить, проще будет)

aodzaki.toko
09.03.2017
10:03:30
Там же есть "etc"

Ilya
09.03.2017
10:03:44
Ну, etc был после точки после JS.

Так что я предположил что пот эт цетрой идут фреймворки для ФРП на жсе.

Тьфу

Фреймворки

aodzaki.toko
09.03.2017
10:04:03
Js - вершина айсберга

Ilya
09.03.2017
10:04:05
Хаха, либы.

Чтобы было понятней можно в уме второе предложение снести на другую строчку. И etc приобретает новый контекст.

Denis
09.03.2017
10:10:59
охо

Gleb
09.03.2017
10:53:46
Привет, хотел спросить Ramda.merge на всех уровнях вложенности работает? т.е могу ли избавиться от постоянных вложенных rest операторах при исполозовании этой функции?

Или это тот же Object.assign?

Андрей
09.03.2017
11:02:15
Merge делает только поверхностный мерж. Это полный эквивалент Object.assign({},target, source).При помощи mergeWith можно сделать рекурсивный мерж. Но обычно это не нужно и лучше просто использовать линзы( http://blog.csssr.ru/2016/07/08/lenses/ ) или какое то другое при для работы с иммутабельными структурами(immutable.js, immutable-seamless etc)

Gleb
09.03.2017
11:02:43
А все понял immutable.js все таки придется тянуть)

спасибо!)

Андрей
09.03.2017
11:02:47
*другое апи

Gleb
09.03.2017
11:04:01
Да я знаю, можно было не задавать, просто на секнуду подумал зачем они же не стали бы делать эквивалент Object.assign

все все разобрался, спасибо еще раз!

Google
Vasiliy
09.03.2017
13:15:08
конечно с redux-observable немного не удобный есть момент один

https://redux-observable.js.org/docs/basics/Epics.html REMEMBER: Epics run alongside the normal Redux dispatch channel, after the reducers have already received them. When you map an action to another one, you are not preventing the original action from reaching the reducers; that action has already been through them!

"after the reducers have already received them" т.е. нет доступа к предыдущему состоянию, либо я чего-то не понял но это не удобно, не вижу пути кроме как передавать в пейлоаде нужное "предыдущее"

andretshurotshka?❄️кде
09.03.2017
13:30:50
Там же есть store вторым аргументом

Хотя может это не то

Vasiliy
09.03.2017
13:33:43
да, но он на уже в состоянии после срабатывания reducer'ов ну я конечно в стейте могу хранить предыдущее состояние еще как вариант, но мне это не нужно

было бы прикольно если я бы я эпику мог сказать на каком этапе ему срабатывать: до или после редьюса или придумать что-то еще)

andretshurotshka?❄️кде
09.03.2017
13:39:52
А зачем нужен прошлый стейт?

Vasiliy
09.03.2017
13:40:24
сравнить с текущим и принять решение по сайд-эффектам – какие нужно запустить / остановить

Filipp
09.03.2017
13:42:07
так может не надо ничего менять по экшнам которые ты как-то преобразуешь

Vasiliy
09.03.2017
13:42:39
т.е. например: было [1, 3, 12] стало [1, 5, 3]

^ нужно остановить для 12 или, например: old: [1, 2, 5], new: [5, 3, 8, 1] stop: difference([1, 2, 5], [5, 3, 8, 1]) // 2 run: difference([5, 3, 8, 1], [1, 2, 5]) // 3, 8 run и stop это могут быть данные для команд подписок на что-либо, например поэтому тут мне нужно как-то получить old ну это так себе проблема, просто приходится это делать где-то в другом месте сейчас, иначе эпику не узнать об old

так может не надо ничего менять по экшнам которые ты как-то преобразуешь
т.е. я не только преобразую экшны, в основном я наоборот произвожу сайд-эффекты там у меня много эпиков вообще .filter(always(false)) заканчиваются (т.е. вот такие ради сайдэффектов только и существуют)

andretshurotshka?❄️кде
09.03.2017
13:53:48
https://github.com/cyclejs-community/redux-cycles видели?)

Vasiliy
09.03.2017
13:57:01
дааа подсаживают на cyclejs людей постепенно)

Yung
09.03.2017
14:00:09
https://github.com/cyclejs-community/redux-cycles видели?)
Угу, сейчас вот пытаюсь впилить (нихуя не понимаю в frp на самом деле)

andretshurotshka?❄️кде
09.03.2017
14:00:13
там вроде можно прошлый стейт получить. Хотя я не пробовал, у меня thunk везде) На cycle только ботов писал для телеграма и чет для этого он не очень зашел мне (ну мб я криво драйвер сделал)

Yung
09.03.2017
14:00:14
после этого https://medium.freecodecamp.com/how-to-make-your-react-app-fully-functional-fully-reactive-and-able-to-handle-all-those-crazy-e5da8e7dac10

Какие подводные камни в выборе между xstream и rxjs?

Filipp
09.03.2017
14:02:54
нужно чёткое понимание hot vs cold для начала

Google
andretshurotshka?❄️кде
09.03.2017
14:03:47
share везде)

на xstream не хочется переходить потому что штальц люто пропагандирует его) так еще с этим unified он и так в зависимости к драйверу попадает ?

Filipp
09.03.2017
14:05:11
В xstream автоматический рефкаунтинг. Это часто удобно, но не позволяет воспринимать observable как "функцию", которая может возвращать несколько значений синхронно или асинхронно

потому что теперь всё зависит от того, подписывался ли кто-то уже на то же самое

это удобно со всякими ивент потоками типа кликов и не очень удобно со всякими of/from

а с http-запросами может быть как удобно, так и нет)

в rx это опт-ин, а в xstream вроде как единственный вариант (хотя там сделали какую-то интеграцию с будущими нативными обзервабл, кажется в том числе чтоб давать опт-аут)

Filipp
09.03.2017
14:15:21
это поправка к hot я бы сказал

классическое hot это ивентбас

просто что-то происходит и на это можно подписываться

при ревкаунтинге всё-таки происходит запуск и остановка продюсера (источника сигнала), но не на каждого подписчика отдельно как в cold, а сразу на всех

то есть запускается когда количество подписчиков переходит от 0 к 1 и останавливается когда от 1 к 0

соответственно если был 1, потом 0, и снова 1 это перезапуск

в случае http повторный запрос

andretshurotshka?❄️кде
09.03.2017
14:21:37
Так в cycle подписки все равно внутри где-то)

Filipp
09.03.2017
15:49:16
Это только усложняет

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