
Vasiliy
08.02.2017
00:29:26
(s[0], a) -> s[1],
(s[1], a) -> s[2],
...,
(s[n-1], a) -> s[n]
a
ну т.е. есть частично применить a, то потом можно сделать композицию, но изначально разве это можно назвать композицией?

Владимир
08.02.2017
00:39:05
Ну ты правильно сказал, она уже от двух аргументов, один из которых фиксированный, композицией я бы тут назвал лишь проваливание вычисленного значения дальше
Наверное тут нужно быть ледяным драконом что бы ответить точно на твой вопрос

Google

Vasiliy
08.02.2017
00:42:41
вот еще хотел спросить пользуется ли кто этим https://github.com/sebinsua/ramda-debug

Владимир
08.02.2017
00:46:53
https://docs.google.com/presentation/d/1WmIH538r0ubjW5zfKh43I1_Up4OnqQnNhICETyDnhSI/mobilepresent?pli=1&slide=id.g333e5ebdc_0137
Вот тут много примеров и названий, может быть найдешь что нибудь похожее

andretshurotshka?❄️кде
08.02.2017
05:29:06

Vladimir
08.02.2017
07:44:57

Vasiliy
08.02.2017
09:45:23
o, для тех кто на маке и кто юзает альфред и rxjs появилась вот эта хрень https://github.com/SamVerschueren/alfred-rxjs

Filipp
08.02.2017
13:10:58
огонь

Vasiliy
09.02.2017
12:08:32
чеет не очевидно мне опять, если pipe убрать, то тут уже не будет {}: https://goo.gl/0xXiaw
ладно, похоже я что-то вообще не то пытаюсь сделать,
не уверен, что мне это нужно именно так делать в принципе, попробую мыслить иначе (%

andretshurotshka?❄️кде
09.02.2017
13:57:21
так это из-за того что функции каррированые мб? https://goo.gl/XGgOyc

Vasiliy
09.02.2017
14:01:15
а там должно быть не 2, а {}
в последнем примере
в смысле, если убрать аргумент
вообще, странно, что такая ф-ция на выходе, я вроде все аргументы дал, мне это не очевидно

Google

andretshurotshka?❄️кде
09.02.2017
14:47:45
https://goo.gl/nZqTqZ
хотя я не оч понял что нужно сделать)

Vasiliy
09.02.2017
14:55:45
ооо, unary!
спасибо))

Vlado
09.02.2017
15:44:54
https://github.com/fp-dom

andretshurotshka?❄️кде
09.02.2017
16:54:34
Странно что коммитов год не было)

Yumi
09.02.2017
18:44:39
Допустимо ли в чистой функции использовать методы нативных обьектов вроде Array.from такого? Или стоит передавать в аргументы?
Или просто придерживаться отсутствия сайд эффектов и этого достаточно?

Дмитрий
09.02.2017
18:51:44

Yumi
09.02.2017
18:54:48
Читал в руководстве редакса вроде бы, что в редьюсерах нельзя использовать внешнее апи и аргумент там был в том, что это чистая функция. Хотя не точно помню, что именно в руководстве, это было.

Дмитрий
09.02.2017
18:55:42
Внешнее api — это api удалённого ресурса, который нужно читать асинхронно

Yumi
09.02.2017
18:55:57
Понятно.

Дмитрий
09.02.2017
18:56:16
Всё синхронное и вычислительно несложноее — можно

Dmitriy
09.02.2017
19:02:58

Yumi
09.02.2017
19:03:39
Понимания)

Dmitriy
09.02.2017
19:09:40
На практике в языках с поддержкой манкипатчинга сложно делать функции православно чистыми.
Например спред тут разворачивается в concat, который можно пропатчить https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=es2015%2Ces2015-loose%2Ces2016%2Ces2017%2Clatest%2Creact%2Cstage-0%2Cstage-1%2Cstage-2%2Cstage-3&targets=&browsers=&builtIns=false&code=const%20k%20%3D%20%5B1%2C2%2C3%5D%3B%0Aconst%20n%20%3D%20%5B...k%2C%204%5D%3B

Дмитрий
09.02.2017
19:39:05
Я просто предпочитаю считать, что у меня в языке его нет

Google

Dmitriy
09.02.2017
19:40:44
Можно так же считать, что твоя функция чистая )

Vladimir
09.02.2017
19:41:37

Дмитрий
09.02.2017
19:43:17
Не, никто не спорит, что при должной изобретательности можно поломать любой алгоритм

Vladimir
09.02.2017
19:44:02
даже в казалось бы хаскеле есть unsafeCoerce =(

Владимир
09.02.2017
20:36:43

Nikita
09.02.2017
20:52:29
ссылки по теме
http://tomasp.net/coeffects/
https://github.com/Day8/re-frame/wiki/Effectful-Event-Handlers
там есть про coeffects

Дмитрий
09.02.2017
21:39:35
Все так делают, полифилы же
Полифиллы по определению не должны добавлять неожиданных сайд-эффектов в таком масштабе, что аж для редакса создавать проблемы)

Vasiliy
09.02.2017
21:57:22
странная фигня сегодня со мной произошла
про тестирование с redux-observable,
есть вот такой простой пример
export const search$ = (action$: ActionsObservable<Action<string>>) =>
action$.ofType(PLAY_SEARCH)
.map((action: Action<string>) => action.payload)
.filter(q => q.length > 3)
.debounceTime(1000)
.distinctUntilChanged()
.switchMap((q: string) =>
ajax
.getJSON(`https://api.github.com/repos/vyorkin/${q}/stargazers`)
.map(data => search({ data }))
.catch((error: Error) => of(search(error)))
).takeUntil(action$.ofType(PLAY_SEARCH_CLEAR));
сорри, сейчас в гист заверну лучше)

Vladimir
09.02.2017
21:59:28


Vasiliy
09.02.2017
21:59:42
проблема с тестом
я еще не успел дописать) сек
https://gist.github.com/vyorkin/d41218a2ea803db53bba2a7ae8d4cb64
ну, проблема в том, что тест не проходит
а вот другой на другой эпик проходит
ну на банальном пинг-понг примере
import * as test from 'tape';
import 'rxjs/add/operator/mapTo';
import configureMockStore from 'redux-mock-store';
import { createEpicMiddleware } from 'redux-observable';
import { ping, pong } from 'modules/pong/actions';
import { pong$ } from 'modules/pong/epics';
const epicMiddleware = createEpicMiddleware(pong$);
const mockStore = configureMockStore([epicMiddleware]);
test('maps ping actions to pong actions', t => {
const store = mockStore();
store.dispatch(ping());
t.same(
store.getActions(),
[ping(), pong()],
);
epicMiddleware.replaceEpic(pong$);
t.end();
});
вот этот ок
(я там добавил вывод с дифом выше)
я думал, что дело в debounceTime, но дело видимо в ajax
лан, это глупо, я щас найду)

Google

Vasiliy
09.02.2017
22:22:19
нашел, дело и в debounceTime и в ajax (%
вот еще что-то нарыл https://github.com/cmelion/redux-observable-test-helpers про тестирование c redux-observable
и вот этот пост https://medium.com/kevin-salters-blog/writing-epic-unit-tests-bd85f05685b#.gc4gt98o6
единственное я пока не понял как быть с debounceTime
не, эт пц, там все изменилось сильно, я не понимаю где advanceTo и прочие, какая ему альтернатива
в гиттере тихо чет пока

andretshurotshka?❄️кде
10.02.2017
10:27:21
/stat

Combot
10.02.2017
10:27:21
combot.org/chat/-1001071213089

andretshurotshka?❄️кде
13.02.2017
12:39:35
?

Vasiliy
14.02.2017
16:23:14
чеет опять застрял)
const select = pipe(path, toArray);
<- так не работает
const select = arg => pipe(path(arg), toArray)
где: toArray это:
const toArray = ifElse(isArrayLike, identity, of);
что мне тоже не нравится, я знал способ лучше, но забыл)
ща, репл)
https://goo.gl/fz7qDi
чет я никогда этого вот не понимаю(
в общем вопрос сводится к:
как записать вот такое point-free?: const select = p => pipe(path(p), toArray)

? animufag ?
14.02.2017
16:33:10
compose

andretshurotshka?❄️кде
14.02.2017
16:33:35
https://goo.gl/9tfgpN
Note: The result of pipe is not automatically curried.
из доки

Vasiliy
14.02.2017
16:34:00
omg( спасибо!
ничего, привыкну, еще пару раз наступлю и запомню)

andretshurotshka?❄️кде
14.02.2017
16:40:20
?

? animufag ?
14.02.2017
16:46:33
на самом деле забавно: прикинул что у compose более ественный порядок применения, использовал его и сработало
compose(path, toArray)(p)(b) // => [1, 2, 3]
но там семантика другая: p приводится к массиву, path полуприменяется

Vasiliy
14.02.2017
16:47:09
хм
https://goo.gl/A1iU3k
вот покороче https://goo.gl/9JtVts

andretshurotshka?❄️кде
14.02.2017
17:04:36

Google

andretshurotshka?❄️кде
14.02.2017
17:04:46
compose от pipe только порядком аргументов отличается
Note: The result of compose is not automatically curried.
а зачем p приводить к массиву ¯\_(ツ)_/¯

Vladimir
14.02.2017
17:39:13

andretshurotshka?❄️кде
14.02.2017
17:42:54
путь для path

Vasiliy
14.02.2017
17:42:56
массив)

andretshurotshka?❄️кде
14.02.2017
17:51:37
ну в итоге как-то так https://goo.gl/23SdwO

Vasiliy
14.02.2017
17:51:53
да, я уже юзаю так)