
Vladimir
16.05.2017
08:07:40

Сергей
16.05.2017
08:09:39
линзы для повседневных задач?!

Дмитрий
16.05.2017
08:10:30
А что?

Vladimir
16.05.2017
08:16:32

Google

Vladimir
16.05.2017
08:16:46
линзы для ридакса самое то

Yumi
16.05.2017
08:16:48

Сергей
16.05.2017
08:17:09

Yumi
16.05.2017
08:20:01
Есть lensPath. С ним легче.

Vladimir
16.05.2017
08:25:00

Denis
16.05.2017
08:37:48
линзы в js бьют по производительности

Kirill
16.05.2017
08:39:29
А если использовать immutable.js, то там по сути ведь обновление данных с помощью линз идёт, не?

Yumi
16.05.2017
08:39:42

Denis
16.05.2017
08:39:50
+ еще отличие лодаша - это перформанс
вообще классическая линза должна быть сделана через Const и Identity для которых функтор имеет интересную особенность

Kirill
16.05.2017
08:42:19

Denis
16.05.2017
08:42:28
ну было да

Google

Denis
16.05.2017
08:42:55
хотя я не уверен про lodash-fp через композицию не будет фьюзиться
вчера пытался сделать монадный параморфизм =)

Сергей
16.05.2017
09:04:53

Denis
16.05.2017
09:06:16
шо за блох?

Yumi
16.05.2017
09:06:52

Denis
16.05.2017
09:08:08
я вам тут покушать принес https://github.com/xgrommx/awesome-functional-programming#lenses

from
16.05.2017
09:21:23
а не хочется, чтобы в рекомпоуз wrapDisplayName была каррирована и принимала аргументы наоборот?
Можно было бы делать так:
или уже возможно подобное, но я не могу найти?

Vladimir
16.05.2017
09:21:59
у меня работало
мб enhance
все хоки каррированы

from
16.05.2017
09:22:30
не похоже https://github.com/acdlite/recompose/blob/a74d7c0013d4b792ed8b9e6b17f68ff9db25127f/src/packages/recompose/wrapDisplayName.js

Vladimir
16.05.2017
09:22:59
попробуй enhance

from
16.05.2017
09:23:39
а что за enhance? :) https://github.com/acdlite/recompose/blob/master/docs/API.md
enhance'ом тут называется любой сделанный hoc
это вот setDisplayName каррирована
но это не так интересно, получится в итоге просто withAccount, а хочется-то withAccount(CurrentComponent)

Сергей
16.05.2017
09:28:31
сделай ПР

Google

Сергей
16.05.2017
09:28:33
это же опенсорц

from
16.05.2017
09:29:54
так легко
хочу сначала выяснить нужно ли это или я пропустил что-то

Vladimir
16.05.2017
09:30:24
setDisplayName
да
https://github.com/acdlite/recompose/blob/master/docs/API.md#setdisplayname

from
16.05.2017
09:31:29
@iamstarkov так это я вижу, я в своём примере его и использовал
в сочетании с гипотетически-каррированным wrapDisplayName было бы круто :)
хотя не совсем так
связка эта тут не нужна видимо, достаточно было б чтоб wrapDisplayName задавал компоненту displayName
ну или нужна, только видимо через pipe или как-то так :)
короче .chain :) https://www.webpackbin.com/bins/-KkFcixC3Ie5GzHS3QR9

Denis
16.05.2017
11:26:37
а теперь объясни почему chain(хорошая практика кстати)
кстати рекомпоуз прикольно юзать с контрамапой https://github.com/DrBoolean/Oh-Composable-World

from
16.05.2017
11:39:56

Denis
16.05.2017
11:40:05
да
для себя самого
ну и в чатик

from
16.05.2017
11:41:22
ну э короче языком жестов и набросками карандашом объясню наверное :))

Denis
16.05.2017
11:41:38
тут все просто почему так
если chain, то значит?
функция есть?

Google

from
16.05.2017
11:43:16
если я скажу че-то типа "тут нужен chain потому что надо аргумент "пробросить" по обеим функциям" то я это сам убедительным объяснением не посчитаю..)

Denis
16.05.2017
11:43:34
правильно
потому что у тебя тут ридер из статического окружения
а это что тогда?
я уже столько подсказок сделал =)

from
16.05.2017
11:44:26

Denis
16.05.2017
11:44:44
думай

from
16.05.2017
11:49:34
боюсь я терминологию не знаю
но как бы дело в том, что функция wrapDisplayName не возвращает объект над которым оперирует, а надо

Admin
ERROR: S client not available

Denis
16.05.2017
11:58:43
это монада

Vasiliy
16.05.2017
17:46:40
const withAccount = BaseComponent => {
const hoc = compose(
withProps({ store: accountStore }),
connect(pick(['account', 'trades'])),
);
if (process.env.NODE_ENV !== 'production') {
return setDisplayName(wrapDisplayName(BaseComponent, 'withAccount'))(hoc(BaseComponent));
}
return hoc(BaseComponent);
};
т.е. по аналогии, так же, как в самом рекомпоузе делаются эти вещи
да, выглядит не красиво
во что?) что это работает или что так в рекомпоузе делают hoc'и?

Denis
16.05.2017
17:50:48
не сношайтесь с этим всем, берите pux

Vasiliy
16.05.2017
17:50:56
да, pux клевый
но не в прод и не у меня работе)) так-то сам тащусь) чисто для себя для пет-проджекта какого-то взял бы его

Denis
16.05.2017
17:51:29
там все по правилам, эффекты отдельно и все делается с помощью трансформеров

Vasiliy
16.05.2017
17:51:42
да, я проперся от реализации эффектов

Denis
16.05.2017
17:51:55
ну это же мать ее луковица монад)

Vasiliy
16.05.2017
17:52:11
update (RequestTodos) state =
{ state: state { status = "Fetching..." }
, effects:
[ do
res <- attempt $ get "http://jsonplaceholder.typicode.com/users/1/todos"
let decode r = decodeJson r.response :: Either String Todos
let todos = either (Left <<< show) decode res
pure $ ReceiveTodos todos
]
}
красота

Google

Denis
16.05.2017
17:53:10
если еще ExceptT будет вместо просто Either то вообще круто)

Vasiliy
16.05.2017
18:10:32
я вообще только сейчас от тебя узнал про ExceptT, извините за мой плохой хаскель
хорошая вещь, вот только что понял что это такое

Denis
16.05.2017
18:13:07
ну есть еще вариант с накопителем ошибок (чтобы историю ошибок знать) Validate ну может трансформер есть ValidateT

Kirill
18.05.2017
13:03:15
Привет всем. Как в терминах ФП называется функция такого типа a => a?

Andrew
18.05.2017
13:06:02
identity

Paul
18.05.2017
13:06:28

Kirill
18.05.2017
13:07:15
Спасибо.

Yumi
18.05.2017
19:23:36
echo
?

Denis
19.05.2017
11:36:45
Вообще это торжественность в изоморфности к логике 1 порядка :-D

Aleh
19.05.2017
11:37:22
тождественность?
(все слова понял по одиночке, но не вместе)

Denis
19.05.2017
11:38:29
Ну да если true то true и наоборот
Вообще-то это полиморфная функция
И эндоморфизм везде в типах
Ибо мы можем отображать только в себя
Если вспомнить математику
То там было суръекция биекция и инъекция