{
const extractSexSize = R.pick(['sex', 'size'])
const isSameSexSize = obj1 => obj2 => R.equals(extractSexSize(obj1), extractSexSize(obj2))
const filterProducts = nProducts => nCustomer => R.filter(isSameSexSize(nCustomer), nProducts)
const getName = R.prop('name')
const getUpperName = R.pipe(getName, R.toUpper)
const magicFn = products => customers => {
const getCustomerProducts = filterProducts(products)
return R.reduce((acc, customer) => ({
...acc,
[getUpperName(customer)]: R.map(getName, getCustomerProducts(customer))
}), {}, customers)
}
return magicFn(products)(customers)
}