
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

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
вот
спасибо :)

Vladimir
13.06.2017
17:46:10

Дмитрий
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 было всё ок и потом расписать что я хотел вообще сделать

Дмитрий
13.06.2017
17:58:48

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

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

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
гисты

Дмитрий
13.06.2017
18:09:04

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

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

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


Yumi
13.06.2017
18:25:51
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);
});
let почему используешь?


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

Denis
13.06.2017
18:26:06
не


Сергей
13.06.2017
18:26:06
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);
});
В гист надо такое


Denis
13.06.2017
18:26:22
а хотя частично да
трипликатор аргумента будет W1 = B(W)(W)
а M1 = W(W(I))