@frp_ru

Страница 95 из 420
Дмитрий
08.07.2017
06:40:02
Ага

andretshurotshka?❄️кде
08.07.2017
06:40:56
Надо у рамды доку как в hackage

Где все инстансы показываются

Denis
08.07.2017
07:47:37
аппликатив для функции это комбинатор S - ap и K - of

Google
Vadim
08.07.2017
07:56:34
@xgrommx, а ты можешь объяснить в каком случае в методах ramda можно передавать некаррированные функции в качестве аппликатива? Есть вообще какая-то логика? То, что sequence принимает массив обычных функций это фича или баг? Просто у тебя выше я видел подобное использование sequence )

Denis
08.07.2017
07:58:32
в чем баг?

все правильно

просто у js нет полиморфизма и вывода типа

поэтому надо явно указать 1 аргументов of

это же внутри все равно аппликатив

например sequence(always, [f1, f2])

есть просто

Vadim
08.07.2017
07:59:51
В общем, везде, где ramda требует аппликатив, можно использовать функции?

Denis
08.07.2017
08:00:00
конечно

ну покрайней мере в sequence/traverse

Vadim
08.07.2017
08:00:16
Спасибо

Google
Denis
08.07.2017
08:00:21
и не только функции

у всего у чего есть аппликативная структура

Vadim
08.07.2017
08:00:52
ну покрайней мере в sequence/traverse
А вот это плохо. Плохо что какие-то НЕДОКУМЕНТИРОВАННЫЕ исключения, о которых необходимо знать.

а если недокументированные, то фиг знает насколько безопасно их использовать

Denis
08.07.2017
08:02:41
ну как бы тут все норм https://github.com/ramda/ramda/blob/v0.24.1/src/sequence.js

да и сигнатура это говорит (Applicative f, Traversable t) => (a -> f a) -> t (f a) -> f (t a)

Vadim
08.07.2017
08:04:32
Я не уточнил что я имею в виду ) Я о том, что sequence в качестве аппликатива принимает простые функции, а некоторые другие методы под аппликативами подразумевают только каррированные

например тот же ap

Значит функция как таковая в мире ramda не является аппликативом сама по себе

Denis
08.07.2017
08:05:58
является

https://github.com/ramda/ramda/blob/v0.24.1/src/ap.js#L35

Vadim
08.07.2017
08:07:01
Почему в документации по ap сказано "Also treats curried functions as applicatives."?

зачем сказано именно curried?

И, как я уже говорил выше, смотреть в коде на недокументированные вещи не имеет смысла. В следующем же минорном релизе их может не быть

andretshurotshka?❄️кде
08.07.2017
08:21:02
зачем сказано именно curried?
в сигнатуре по-другому зато)

так что надо на них смотреть

Vadim
08.07.2017
08:23:06
Я так понимаю, что chain тоже принимает аппликативы? Судя по тому что он работает с функциями

Denis
08.07.2017
08:23:49
а при чем тут аппликатив и принимает функции?

ну да если работает с chain то и монада и аппликатив и функтор

Vadim
08.07.2017
08:24:22
Что вообще принимает chain? Какое у него требование к аргументам?

Google
Denis
08.07.2017
08:24:44
монаду и стрелку Клейсли

Vadim
08.07.2017
08:25:10
Стрелка клейсли это что в терминах fantady land?

Denis
08.07.2017
08:25:24
Monad m => a -> m b

Admin
ERROR: S client not available

Vadim
08.07.2017
08:26:16
То-есть, функция, возвращающая монаду?

Denis
08.07.2017
08:26:30
ах...

Vadim
08.07.2017
08:28:40
Просто хочу понять ограничение chain

А сейчас я обнаружил вообще черт знает что. Странно, но этот код тоже работает ) const plusOne = x => x + 1; const plusTwo = x => x + 2; const plusThree = x => x + 3; const fn = curry(function(a, b) {}); sequence(fn, [plusOne, plusTwo, plusThree])(1) // => [2, 3, 4] При том, что функция fn ничего возвращать не должна )

Kirill
08.07.2017
11:40:54
Доделал реактивный стор. Своего кода почти нет, в основном использование Rx. https://github.com/Voronar/react-pure-typescript/blob/rx/src/store/TodoStore.ts Какие видите в нём подводные камни навскидку?

andretshurotshka?❄️кде
08.07.2017
11:42:41
много бойлерплейта?)

Denis
08.07.2017
11:43:02
https://github.com/xgrommx/most-reactive-flux

вот Rx через join patterns (в Rx5 его нет походу) https://github.com/xgrommx/react-rx-flux/blob/master/src/store.js

Kirill
08.07.2017
11:47:28
много бойлерплейта?)
Мне показалось, что меньше чем в редакс, по крайней мере без констант и диспатчей (тут получились правда next'ы) всяких. Просто взял нужный стор, подключил его и вызвал метод по обновлению данных (это в принципе и в редакс так). Но не надо редьюсеры комбинировать. Просто создал столько экземпляров стора, сколько надо, если нужно переиспользование как в моём примере с todo.

Единственное, я по производительности не тестил, что будет, если смерджить не 5 subject, а 25, если конечно такое потребуется в конкретном сторе.

Filipp
09.07.2017
10:52:03
Ээ, я думал их из-за перфоманса и убрали

или вот так =) https://github.com/brookemitchell/ramda-reselect#how-to

const createSelector = (...fns) => R.pipe( R.of , R.ap(fns.slice(0, -1)) , R.apply(R.memoize(fns[fns.length - 1])))

Дмитрий
09.07.2017
11:08:15
ну это трэш

Google
Дмитрий
09.07.2017
11:09:12
const createSelector = (...fns) => R.pipe( R.of , R.ap(fns.slice(0, -1)) , R.apply(R.memoize(fns[fns.length - 1])))
Такие функции надо писать максимально низкоуровнево, без комбинации ap, of и apply ?

Я уж не говорю про то, что рамдовский memoize и так не самый быстрый, здесь вообще как в телеге пятое колесо, потому что реселект по умолчанию запоминает только одну позицию, в этом и фича

Filipp
09.07.2017
11:22:13
Это да

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