@frp_ru

Страница 36 из 420
Дмитрий
15.02.2017
08:35:10
На ум идёт только всякая дичь)

Vasiliy
15.02.2017
08:55:23
смог заменить?
неа, я дальше продолжил что-то писать и забыл)

Дмитрий
15.02.2017
10:22:45
еще бы toArray убрать/заменить на что-то мне кажется это дичь и можно было как-то проще, но я забыл как
toArray кстати вполне естественно не заменился, эта штука называется arrify) И вообще существует, чтобы аргументы функции выполняли правило Zero One Infinite

Google
Vasiliy
15.02.2017
10:23:38
типа того? https://github.com/sindresorhus/arrify/blob/master/index.js#L7 (: блин этот чувак жжет

Дмитрий
15.02.2017
10:23:56
Да, оно как раз)

На рамде короче всего записывается как unless(isArrayLike, of)

Vasiliy
15.02.2017
10:26:50
спасибо, реально мелочь, а приятно

Artur
15.02.2017
10:27:20
можно еще [].concat(arr || [])))

ну с фолси только надо поаккуратнее, зависит от задачи)

Alex
15.02.2017
10:30:10
а есть какой-нибудь курс по рамде типа как с rxjs на egghead?

Дмитрий
15.02.2017
10:31:39
Вот этот цикл статей хороший http://randycoulman.com/blog/categories/thinking-in-ramda/

Alex
15.02.2017
10:32:58
спасибо

@iamstarkov Вова, а можешь скинуть статью про линзы?

не помню где она была, помню что фон там белый и на русском

Владимир
15.02.2017
11:04:33
https://vimeo.com/104807358

Google
Владимир
15.02.2017
11:04:40
вот отличное видео

Vladimir
15.02.2017
11:09:58
@safinalexey

http://blog.csssr.ru/2016/07/08/lenses/ и вот этот тред https://twitter.com/iamstarkov/status/753353847578370048

Vasiliy
15.02.2017
14:17:57
а вы часто используете вообще R.__ или все flip'аете и частично применяете? я стараюсь флипать где можно, если аргумент в центре и до него сложно добраться, то __

Vladimir
15.02.2017
14:21:45
я использую R.__ часто

удобно

Alex
15.02.2017
14:34:14
danke

Vladimir
15.02.2017
19:19:07
danke
а что ты хочешь линзами?

Дмитрий
16.02.2017
04:24:53
Нашёл для arrify решение ещё изящнее const flatArgs = unapply(unnest) Вставленный в pipe, он позволяет передавать в функцию любой набор аргументов и их массивов

const flatArgs = unapply( unnest ) const uni = pipe( flatArgs, append( 6 ) ) uni( 'abcd', [ 1, 2, [ 3 ] ], [ 4 ], 5, 'efg' ) // => ["abcd", 1, 2, [3], 4, 5, "efg", 6]

Vasiliy
16.02.2017
10:12:57
да, unapply(unnest) это неплохо, позаимствовал)

Vasiliy
18.02.2017
02:07:56
чет я опять приуныл :( const toggle1 = useWith(flip(over(__, not, __)), [identity, lensProp]) const toggle2 = useWith(flip(flip(over)(not)), [identity, lensProp]) дичь ^ const toggle3 = (state, name) => evolve({ [name]: not })(state) не pointfree ^ https://goo.gl/C4AG99

Vasiliy
18.02.2017
02:12:49
toggle a set?

Дмитрий
18.02.2017
02:13:43
Toggle — инвертирует существующее значение, а эта функция просто задаёт всем новое

Vasiliy
18.02.2017
02:14:09
а, да, название не подходящее

Дмитрий
18.02.2017
02:14:31
Мне просто уточнить, потому что set чуть-чуть проще делается

Vasiliy
18.02.2017
02:14:56
да, просто всем значениям в объекте (1 параметр) устанавливает указанное во 2 параметре новое значение ^ как-то я криво выразил мысль)

Дмитрий
18.02.2017
02:30:45
toggleAll — это map(not) ?

Google
Дмитрий
18.02.2017
02:32:47
С другими проблема именно в неудобном синтаксисе для бинарных аргументов

Vasiliy
18.02.2017
08:09:27
и правда, чет я не увидел map(not) под утро, спасибо а, мне нужнен был ведь не toggleAll, а setAll, переименовал, реально сбивает с толку, тогда вот так наверное useWith(flip(map), [identity, always])

andretshurotshka?❄️кде
20.02.2017
13:48:50
/stat

Combot
20.02.2017
13:48:56
combot.org/chat/-1001071213089

Oleg
20.02.2017
18:30:05
Всем привет )

Есть две сущности. Предположим это country и city. У них есть поля country.title и city.name. Обе сущности обернуты в Maybe. Мне нужно получить один из трёх возможных вариантов строки: ${country.title}, ${city.name} ${country.title} ${city.name} В зависимости от того определены ли country и city. Собственно вопрос - как реализовать это максимально верным функциональным способом? Я использую ramda и ramda-fantasy

Oleg
20.02.2017
19:59:43
R.pipe( R.apply(R.of), R.join(', ') )
Не совсем понятно как это использовать

Vladimir
20.02.2017
20:01:18
Не совсем понятно как это использовать
Тебе нужно прокинуть в эту функцию country.title и city.name

Oleg
20.02.2017
20:03:47
const ct = pipe(apply(of), join(', ')) ct('hello', 'world') //error ct(['hello', 'world']) //"hello"

of ведь создает массив из одного элемента

Vladimir
20.02.2017
20:16:49
of ведь создает массив из одного элемента
R.unapply(R.join(', '))('title', 'name') // "title, name"

Oleg
20.02.2017
20:21:53
В общем то написать функцию которая возвращает join её параметров не очень сложно. Меня интересует конкретно, как, применить её к монадам Maybe

Vladimir
20.02.2017
20:22:10
я не силён в монадах

но мб .ap какойнибудь

Den
21.02.2017
08:49:57
В общем то написать функцию которая возвращает join её параметров не очень сложно. Меня интересует конкретно, как, применить её к монадам Maybe
А если как-то так? const collectMaybes = reduce( (xs, m) -> m.reduce(flip(append), xs), [] ) const joinMaybeStrings = pipe(collectMaybes, join(', ')) joinMaybeStrings([Just('a'), Nothing, Just('b')])

from
21.02.2017
11:32:28
уффф, прошу прощения за мой недофункциональный код, возможно в скором времени для меня станут "интуитивно понятными" вот эти все unapply–flip–append, но пока что все ваши примеры я считаю нечитаемым кодом

Есть две сущности. Предположим это country и city. У них есть поля country.title и city.name. Обе сущности обернуты в Maybe. Мне нужно получить один из трёх возможных вариантов строки: ${country.title}, ${city.name} ${country.title} ${city.name} В зависимости от того определены ли country и city. Собственно вопрос - как реализовать это максимально верным функциональным способом? Я использую ramda и ramda-fantasy
на скорую руку поглядев на всякие get и Maybe, я придумал такое решение — const city = { name: 'Sydney' }; const country = { title: 'Australia' }; const get = R.curry((propName, obj) => Maybe(obj[propName])); const cityName = get('name'); const countryName = get('title'); const address = [ cityName(city || {}), countryName(country || {}), ] .filter(x => x.value) .map(x => x.value) .join(', ');

кажется оно чуть понятнее Уверен, его можно ещё упростить

(edit: исправил name на title в случае с country)

Google
andretshurotshka?❄️кде
21.02.2017
11:48:52
Чет совсем не то) кто видел repl с ramda-fantasy?

from
21.02.2017
11:52:41
Чет совсем не то) кто видел repl с ramda-fantasy?
сломано https://github.com/ramda/ramda.github.io/issues/156

Дмитрий
21.02.2017
13:36:41
Тест

Аллилуя)

Admin
ERROR: S client not available

Oleg
21.02.2017
13:41:02
В целом да. Естественно любая из них может быть Nothing

from
21.02.2017
13:58:32
так, всё-таки действительно всё ещё проще. Никакие Maybe не нужны и можно убрать лишний .map: http://ramdajs.com/repl/#?const%20city%20%3D%20%7B%20name%3A%20%27Sydney%27%20%7D%3B%0Aconst%20country%20%3D%20%7B%20title%3A%20%27Australia%27%20%7D%3B%0A%0Aconst%20get%20%3D%20R.curry%28%28propName%2C%20obj%29%20%3D%3E%20obj%5BpropName%5D%29%3B%0Aconst%20cityName%20%3D%20get%28%27name%27%29%3B%0Aconst%20countryName%20%3D%20get%28%27title%27%29%3B%0A%0Aconst%20address%20%3D%20%5B%0A%20%20cityName%28city%20%7C%7C%20%7B%7D%29%2C%0A%20%20countryName%28country%20%7C%7C%20%7B%7D%29%2C%0A%5D%0A%20%20.filter%28x%20%3D%3E%20x%29%0A%20%20.join%28%27%2C%20%27%29%3B%0A%0Aaddress%3B%0A

from
21.02.2017
14:01:23
А в чем? Написать дичь другого рода? :) Задача — сделать надёжно и понятно. Нахрена нам функциональное программирование ещё? )

Vasiliy
21.02.2017
14:20:41
ребят, кто польузет recompose, можете объяснить когда и как и почему вы делаете выбор между withProps vs withHandlers?

Дмитрий
21.02.2017
14:21:41
Хэндлеры не пересоздаются

Vasiliy
21.02.2017
14:21:47
да, вот это самая вроде бы главная причина выбирать withHandlers, когда нужны ф-ции

Дмитрий
21.02.2017
14:22:32
А нужны другие?)

Vasiliy
21.02.2017
14:22:44
я что-то делаю не так, щас покажу сек очень много писанины(

Дмитрий
21.02.2017
14:23:01
Любой onClick(id) в рендере будет ломать напрочь весь shallow update

Vasiliy
21.02.2017
14:23:18
да, это понятно, ну поэтому withHandlers для этого да

мне бы withState чтобы работал как setState с объектами

чтобы мердж делал

Google
Vasiliy
21.02.2017
14:24:05
... withState('state', 'setState', { username: '', password: '', persist: true, showPassword: false, }), withHandlers({ handleUsernameChange: ({ state, setState }) => (event: React.FormEvent<HTMLInputElement>) => setState({ ...state, username: event.currentTarget.value }), handlePasswordChange: ({ state, setState }) => (event: React.FormEvent<HTMLInputElement>) => setState({ ...state, password: event.currentTarget.value }), togglePersist: ({ state, setState }) => () => setState({ ...state, persist: !state.persist }), ...

это ж ад, как вы делаете такие штуки? мб свой hoc сделать просто

Дмитрий
21.02.2017
14:25:10
Ну у нас свой hoc

Но над ним опять рекомпоз, лол))

from
21.02.2017
14:25:25
в setState(...) ...state ни к чему писать же

Vasiliy
21.02.2017
14:25:35
это в реактовском setState

from
21.02.2017
14:25:45
а тут не реактовский? : /

Vasiliy
21.02.2017
14:25:47
неа

вот я щас сделаю свой hoc поверх setState, чтобы было не обязательно

from
21.02.2017
14:26:17
а как он компоненту стейт обновит? oO

Vasiliy
21.02.2017
14:26:43
это все props (% это даже не стейт в терминологии реакта

Дмитрий
21.02.2017
14:27:06
А вообще setState при рекомпозе не особо уже нужен

Vasiliy
21.02.2017
14:27:10
да

Дмитрий
21.02.2017
14:27:22
Вот тебе уже ужимание твоих строчек)

Vasiliy
21.02.2017
14:27:44
я просто ленивый писать эти хоки свои все, щас сделаю да, без этого никак

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