@frp_ru

Страница 77 из 420
Artur
13.06.2017
17:37:40
и как мне это в where завернуть?

Сергей
13.06.2017
17:38:19
{ a: e =>

? animufag ?
13.06.2017
17:39:05
скорей всего функция которая тебе нужна называется isString

Artur
13.06.2017
17:39:09
а если a будет равно 2?

Google
Artur
13.06.2017
17:39:23
или даже не так

почему на int возвращает true?

? animufag ?
13.06.2017
17:40:03
все твои вопросы можно привести к такому: как в джс работает приведение типов

функция String делает строку,а не Boolean

Дмитрий
13.06.2017
17:41:09
почему на int возвращает true?
Ты внимательно изучил как работает этот метод?)

Artur
13.06.2017
17:41:31
нашел решение

Дмитрий
13.06.2017
17:41:31
where({ a: is(String) })

Artur
13.06.2017
17:41:31
let pred = R.where({ a: R.is(String) })

? animufag ?
13.06.2017
17:41:45
не, работу where он понимает

Artur
13.06.2017
17:41:50
да, примерно так, спасибо)

Дмитрий
13.06.2017
17:41:53
Но в конкретном случае есть решение лучше

Artur
13.06.2017
17:41:56
мм?

Дмитрий
13.06.2017
17:42:12
propIs(String, 'a')

Google
Artur
13.06.2017
17:42:30
не уверен

мне на серв будет приходить json, к примеру obj:{a: 3, b: "some"} мне нужно будет чекать тип данных в obj и чекать существуют в нем нужные мне ключи

Дмитрий
13.06.2017
17:44:04
Я поэтому и сказал про конкретный случай)

Когда чекаешь только одно свойство. Так то понятно, что where

Artur
13.06.2017
17:44:21
поэтому я просто напишу R.where({a: R.is(Integer), b:R.is(String)})

djn

вот

спасибо :)

Дмитрий
13.06.2017
17:46:58
all наоборот работает

allPass, плюс propIs тогда все в массиве

Denis
13.06.2017
17:48:44
compose(xs => xs.every(Boolean), sequence(always, [cond1, cond2, ...]))(obj)

даже

compose(xs => xs.every(Boolean), sequence(always))([cond1, cond2, ...], obj) хотя я не уверен

то не будет работать из-за особенности compose вот с o o(o(xs => xs.every(Boolean)))(sequence(always))([x => x > 2, x => x % 4 === 0])(10)

Дмитрий
13.06.2017
17:54:32
?

Denis
13.06.2017
17:54:46
?)

Artur
13.06.2017
17:55:59
а сюда можно свои поделки кидать?

Denis
13.06.2017
17:56:13
поделки?

Дмитрий
13.06.2017
17:56:16
?)
Мощно конечно) но когда я замечаю у себя такие конструкции, то иду на перерыв ?

Google
Denis
13.06.2017
17:56:37
ну просто аппликативная структура)

Artur
13.06.2017
17:57:10
ну т.е говнокод я просто часто когда пишу - очень хочу знать как это можно сделать лучше и как более продвинутые ребятки это реализовали бы

Denis
13.06.2017
17:57:18
валяй

Artur
13.06.2017
17:58:44
чуть позже - хочу дописать, потом заменить ключи чтобы по NDA было всё ок и потом расписать что я хотел вообще сделать

Artur
13.06.2017
17:59:23
ЯННП

У МЕНЯ ПАНИКА

Denis
13.06.2017
17:59:51
мне кажется это можно упростить

Дмитрий
13.06.2017
18:00:05
Это НУЖНО упростить ?

Denis
13.06.2017
18:00:29
я ненавижу это R.__ для этого есть flip

Дмитрий
13.06.2017
18:00:41
Но так как я этот проект не развиваю, то остался хороший пример, куда приводит воспаление point free))

? animufag ?
13.06.2017
18:02:53
я ненавижу это R.__ для этого есть flip
f(__, a) менее читаемо чем flip(f)(a)?

Denis
13.06.2017
18:03:22
менее правильно

прийдешь в какой-то хаскелл и поймешь что никаких плейсхолдеров там нет для этого

? animufag ?
13.06.2017
18:03:59
хаскел = правильно?

Дмитрий
13.06.2017
18:04:31
Плейсхолдеры vs комбинаторы

Глядя на fantasy-birds как то больше тянет к первым))

? animufag ?
13.06.2017
18:05:58
обожаю в хаскеле делать flip $ flip $ flip....

Denis
13.06.2017
18:06:12
кстати про комбинаторы))) const o3 = o(o)(o) o3(xs => xs.every(Boolean))(sequence(always))([x => x > 2, x => x % 2 === 0])(10)

Дмитрий
13.06.2017
18:06:38
Вполне достаточно одной первой строчки

Google
Дмитрий
13.06.2017
18:06:44
Самодостаточное произведение

Artur
13.06.2017
18:06:55
let router = koaRouter(); const orderPattern = ['numSelected','selectedRoutes','totalCost','totalDeliveries'], routerPattern = ['Cost','Income','ObjectBusiness','Residential','Route','Size','TotalDeliveryAddresses']; let orderPred = R.where({ numSelected: R.is(Number), selectedRoutes: R.is(Array), totalCost: R.is(Number), totalDeliveries: R.is(Number) }); let routerPred = R.where({ Route: R.is(String), Cost: R.is(Number), Income: R.is(Number), ObjectBusiness: R.is(Number), Residential: R.is(Number), Size: R.is(Number), TotalDeliveryAddresses: R.is(Number) }); router.post('/', async (ctx, next) => { let order = ctx.request.body.order; if(!(R.equals(R.keys(order).sort(), orderPattern) && orderPred(order))) { ctx.throw('order structure error', 400) } for(var i = 0; i < selectedRoutes.length; i++){ if(R.keys(selectedRoutes[i]).sort(), routerPattern) && routerPred(selectedRoutes[i]))) { ctx.throw('error in structure of ${i} route', 400) } } routesModule.storeRoutes(order); });

как-то так

входные данные

{ "order":{ "numSelected":1, "selectedRoutes":[{ "ObjectBusiness":9, "Cost":95.76, "Income":90543, "Residential":532, "Route":"94121C011", "Size":2.34801624, "TotalDeliveryAddresses":541 }, { "ObjectBusiness":9, "Cost":95.76, "Income":90543, "Residential":532, "Route":"94121C011", "Size":2.34801624, "TotalDeliveryAddresses":541 }], "totalCost":95.76, "totalDeliveries":541 } }

Denis
13.06.2017
18:07:40
когда есть 2 оператора и у первого торчит 2 аргумента, а у второго один, то o3 или же более правильное название B1 (Blackbird) довольно полезный)

? animufag ?
13.06.2017
18:08:11
что-то такое было в хаскель чате. оператор многоточие

Дмитрий
13.06.2017
18:08:24
что ты имел ввиду?
const o3 = o(o)(o) ну отлично же

Denis
13.06.2017
18:08:39
довольно полезный вариант композиции)

Admin
ERROR: S client not available

Artur
13.06.2017
18:08:48
я понимаю что это ужасный говнокод, но это всё что пришло мне в голову кстати, как удобнее кидать? подобным образом или в codeshare?

Denis
13.06.2017
18:08:58
гисты

Denis
13.06.2017
18:09:10
или репл

ахаха

const o3_ = chain(identity)(chain(identity)(identity))(o)

если chain(id) для функции это дубликатор аргумента

то chain(identity)(chain(identity)(identity)) трипликатор

ох

Google
Denis
13.06.2017
18:12:36
const o3__ = unnest(unnest(identity))(o)

я вспомнил что монадный join есть в рамде

я надеюсь никого тут не сломал?

Дмитрий
13.06.2017
18:19:24
Чет не работает в repl)

Denis
13.06.2017
18:19:56
ленивый не поймет) умный проверит

для функции join это W комбинатор или дубликатор аргументов

походу я придумал новый комбинатор

трипликатор

W1 = W(W(I))

Дмитрий
13.06.2017
18:23:27
E(C(M(A(S(C(R(I(P(T)))))))))

Denis
13.06.2017
18:23:46
по аргументам не сойдется)

Сергей
13.06.2017
18:23:47
E(C(M(A(S(C(R(I(P(T)))))))))
Мне теперь это сниться будет ((

Дмитрий
13.06.2017
18:24:03
?

Denis
13.06.2017
18:25:12
это даже не трипликатор а дубликатор самого себя

ибо он применяет сам себя 2 раза

M это применение к самому себе 1 раз

Дмитрий
13.06.2017
18:25:52
Fixed point что ли?)

Denis
13.06.2017
18:26:06
не

Denis
13.06.2017
18:26:22
а хотя частично да

трипликатор аргумента будет W1 = B(W)(W)

а M1 = W(W(I))

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