
Vladimir
04.02.2017
13:13:56

Vasiliy
04.02.2017
13:14:12
во 2 теряется контекст
https://goo.gl/nJsYRq

Vladimir
04.02.2017
13:15:11
ты уверен, что тебе нужен контекст?

Google

Vasiliy
04.02.2017
13:15:24
да, ради этого все и затевалось
я там байндолл делаю) ну ты наверное заметил)

Vladimir
04.02.2017
13:17:44
надо позвать @ZeroBias
я пока отвлечен, что бы по существу помочь
=(

Vasiliy
04.02.2017
13:42:52
чееет я уже не могу прям, не понимаю( очень странно, я уже полчаса пялюсь в это

Vladimir
04.02.2017
13:50:59
спроси в гиттере рамды

Vasiliy
04.02.2017
13:51:20
да, я там сразу спросил
похоже converge только бинарные ф-ции хочет
не уверен, пока не понял до конца

Дмитрий
04.02.2017
13:53:16
Нет, любые

Vasiliy
04.02.2017
13:53:22
https://goo.gl/sKRU2K
но вот это точно не правильно

Дмитрий
04.02.2017
13:53:53
Я пока только проснулся, а на телефоне репл рамды не работает

Google

Дмитрий
04.02.2017
13:54:17
Но могу сказать, что возможно тебе просто нужно посмотреть на useWith
ap кстати юзать вообще не нужно, если у тебя не монады)

Vasiliy
04.02.2017
13:57:14
да понятно, ap это ведь <*>, это просто пример

Дмитрий
04.02.2017
13:59:15
ap это juxt, если мне не изменяет память

Vasiliy
04.02.2017
14:00:11

Дмитрий
04.02.2017
14:01:40
Конверж сначала применяет функции к переданным переменным а потом отправляет их в результат

Vasiliy
04.02.2017
14:03:11
ну да, т.е. это converge(pipe, [flip(prop), flip(bind)])(o); должно правильно работать,
это должно быть равносильно этому:
pipe(flip(prop)(o), flip(bind)(o));
разве нет? мне кажется я чего-то не вижу, но чего именно?
useWith работает, но useWith(pipe, [flip(prop), flip(bind)])(o, o);
да, useWith, но почему converge не канает я так и не понял(

andretshurotshka?❄️кде
04.02.2017
18:26:25
o.o

Yumi
04.02.2017
21:55:29
Я тут делаю первые шаги в освоении рамды и что-то подолгу зависаю над функциями и сложно порой понять их работу, так как в примерах другие неизвестные функции и т.д. Может есть общая лесенка изучения методов? Хотелось бы и в исходниках разобраться или лучше их отложить на будущее, как освою по примерам?

Vladimir
04.02.2017
21:56:08
секунду

Yumi
04.02.2017
21:59:41
Класс, спасибо, пойду читать.


Vasiliy
04.02.2017
22:27:12
http://fr.umio.us/the-philosophy-of-ramda/#header
и вообще весь блог, только осторожно, там ф-ции депрекейтед уже некоторые, но там важен больше смысл/идеология
ну да, т.е. это converge(pipe, [flip(prop), flip(bind)])(o); должно правильно работать,
это должно быть равносильно этому:
pipe(flip(prop)(o), flip(bind)(o));
разве нет? мне кажется я чего-то не вижу, но чего именно?
useWith работает, но useWith(pipe, [flip(prop), flip(bind)])(o, o);
да, useWith, но почему converge не канает я так и не понял(
converge(map, [compose(flip(bind), identity), identity]) вот мне тут подсказали) с двумя айдентетями)
ну это конечно не bindAll, "инстанс класса" не забайндит, прост как пример
а чем-то можно это заменить в ramda?
1 pipe(path(['x', 'y']), complement(isNil))
2 pathSatisfies(['x', 'y'], complement(isNil))
лан сойдет 2
типа hasPath можно свой прост сделать так и все
глупый вопрсо) nvm: const hasPath = pathSatisfies(complement(isNil))
хочу payload & meta reducer как в redux-act, но не хочу сам redux-act:
export const action = <T>(type: string, payload: ArgsReducer<T> = identity, meta?: ArgsReducer<T>) =>
(...args) => meta ?
({ type, payload: payload(...args), meta: meta(...args) }) :
({ type, payload: payload(...args) });
мб как-то можно это выразить через applySpec, хм, или нет
т.е. типа того, но совсем не так:
export const action = <T>(
type: string,
payload: ArgsReducer<T> = identity,
meta: ArgsReducer<T> = always({}),
) => applySpec({ type: always(type), payload, meta });


Yumi
06.02.2017
23:23:15
Нубский вопрос. Стоит ли стремиться к чистой функции, хотя функция все равно останется грязной? Или смысла особого нет?

Google

Yumi
06.02.2017
23:23:56
Cтремиться - уменьшать влияние за пределами функции в смысле.

Vladimir
06.02.2017
23:35:44
проще тестировать
функция зависит только от аргументов
а не от предопределенных в модуле констант
а тебе для теста возможно нужно их переопределять

Yumi
07.02.2017
02:41:43
Попробовал максимально вынести в аргументы, действительно яснее даже для головы стало.
Спасибо.

Vasiliy
07.02.2017
16:01:32
офигенный пост про трансдьюсеры https://medium.com/@roman01la/understanding-transducers-in-javascript-3500d3bd9624#.8dh6uxais

Nikita
07.02.2017
16:06:05
а мне эта понравилась
https://m.habrahabr.ru/post/237613/
только таких красивых картинок нет

Vasiliy
07.02.2017
16:06:30
да) я обе читал) ну вот я щас наткнулся и понял, что круто он расписал, очень просто и доходчиво, даже проще чем в том посте на хабре
и вообще он интересный, я другие посты его еще почитал

Nikita
07.02.2017
16:06:35
:)

Vladimir
07.02.2017
16:11:19

Vasiliy
07.02.2017
16:11:48
да, я смотрел) ну тут я по критерию простоты оценивал)
кстати, надо пересмотреть

Nikita
07.02.2017
16:12:12

Ilya
07.02.2017
16:25:22
Кто-нибудь в питоне знает почему itertools.groupby может создавать не уникальные ключи?

Vasiliy
07.02.2017
16:36:10
наверное, это из-за сайд-эффектов (простите)

Дмитрий
07.02.2017
18:59:42
Мда))

Google

Vasiliy
07.02.2017
18:59:45
да) удалил)

Дмитрий
07.02.2017
19:04:12
Вообще это кстати известная штука

Vasiliy
07.02.2017
19:04:48
это карри (не совсем) я в hoogle поискал и поржал над собой и потом поспешно удалил сообщение XD

Дмитрий
07.02.2017
19:05:16
Ну это один из твоих вариантов был))
А сначала у тебя такой был (( a, b ) -> a ) -> b -> a -> a
Это S.flip

Vasiliy
07.02.2017
19:06:54
просто это вот тоже самое
((S, A) -> S) -> A -> (S -> S):
useWith(partial, [flip, of])
pipe(flip, curry)

Дмитрий
07.02.2017
19:07:40
Ну да

Vasiliy
07.02.2017
19:10:59
удобно в hoogle проверять всякую дичь
придумаешь что-то странное и это можно по сигнатуре проверить, что это такое и как нормальные люди это называют и используют, просто вбиваешь в hoogle (только, вместо S, A, ..., Z надо a, b, ..., z) и смотришь дичь или нет
https://www.haskell.org/hoogle/?hoogle=%28%28a%2C+b%29+-%3E+a%29+-%3E+a+-%3E+%28a+-%3E+a%29
не полное совпадение даже матчит

Дмитрий
07.02.2017
19:15:09
Я могу даже проще способ показать, сразу с градацией)

Vasiliy
07.02.2017
19:16:03
какой?

Дмитрий
07.02.2017
19:20:18
Открываешь ссылки по очереди, пока не найдёшь такой же комбинатор
* ramdajs.com/docs/
Тривиально
* https://github.com/fantasyland/fantasy-combinators
Не тривиально
* https://github.com/fantasyland/fantasy-birds
Ты шутишь?
* Не нашёл
Завязывай с этим

Vasiliy
07.02.2017
19:21:39
последних двух ссылок я даже не видел)

Andrey
07.02.2017
20:04:48
>fantasy-birds
надеюсь, его не используют на реальных проектах)

Дмитрий
07.02.2017
20:05:23
Я тоже надеялся
Но в прошлый раз когда тут поднималась их тема, один нашёлся
Говорил неудобно чот
Странно даже

Google

Andrey
07.02.2017
20:05:56
да, очень странно
я сегодня переписывал код с fantasy-options и Ramda на обычный императивный стиль и это как то сложно далось

Vasiliy
07.02.2017
20:14:54
зачем?)

Дмитрий
07.02.2017
20:15:24
Предложи переписать остальной проект на fantasy-land ?

Andrey
07.02.2017
20:18:07
и сложно читаемо

Vladimir
07.02.2017
20:49:46

Andrey
07.02.2017
20:51:25
в ~9 раз быстрее получилось

Дмитрий
07.02.2017
21:48:39
Если нужна скорость, то логично, что это не про такой высокоуровневый фп
Хотя реализация там конечно не блещет

Vasiliy
07.02.2017
23:47:07
кто-нибудь знает как это называется по-нормальному в ФП? https://github.com/acdlite/reduce-reducers

Vladimir
07.02.2017
23:50:21
единственное что приходит в голову трансдьюсеры

Vasiliy
07.02.2017
23:51:25
да там не совсем они, я не нашел этому названия,
но оно по-любому должно быть

Владимир
08.02.2017
00:24:44
Это же обычная композиция
2 функции через которые потом проходит значение

Vasiliy
08.02.2017
00:25:11
значениЯ, арность > 1 и один аргумент фиксирован

Владимир
08.02.2017
00:26:28
Никакой разницы
Это же не хаскель