Executing multiple steps to handle a purchase using curryingUsing multiple popup windows with bPopupSelect...

Is "plugging out" electronic devices an American expression?

extract characters between two commas?

A poker game description that does not feel gimmicky

Prime joint compound before latex paint?

Pristine Bit Checking

How to deal with fear of taking dependencies

Can I legally use front facing blue light in the UK?

Add an angle to a sphere

How to move the player while also allowing forces to affect it

What happens when a metallic dragon and a chromatic dragon mate?

Why do UK politicians seemingly ignore opinion polls on Brexit?

How to make payment on the internet without leaving a money trail?

Patience, young "Padovan"

Landing in very high winds

Is it legal to have the "// (c) 2019 John Smith" header in all files when there are hundreds of contributors?

Domain expired, GoDaddy holds it and is asking more money

Why doesn't a const reference extend the life of a temporary object passed via a function?

New order #4: World

Why is the design of haulage companies so “special”?

Does bootstrapped regression allow for inference?

Why do we use polarized capacitors?

Is there a name of the flying bionic bird?

What does it exactly mean if a random variable follows a distribution

Are white and non-white police officers equally likely to kill black suspects?



Executing multiple steps to handle a purchase using currying


Using multiple popup windows with bPopupSelect multiple rows using multiple data attributeImproving multiple assignment using an iterator functionAngular controller to handle showing or hiding multiple widgetsControlling Finances with Web DevelopmentUsing dependency injection for Node payment systemProject Euler 5: Smallest multiple in Functional Programming (fp)Executing asynchronous functions in sequenceLexer function to handle the '/' characterPurchase tickets calculation with JavaScript






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}







2












$begingroup$


Is doing something like this utilizing currying in a practical sense?



function processOneClickPurchase(item) {
let context = { step: 0 }

let addItemToCart = item => {
let cart = getSession().cart
cart.items.push(item)
log('Cart items', cart.items)
return cart
}

...

let purchase = generate([
addItemToCart,
makePurchase,
processBilling,
setupShipping,
sendPurchaseAndShippingNotification,
], null, cleanup)

return purchase(item)

function generate(steps, before, after) {
const takeStep = (incoming, outgoing) => {
let message = {
step: ++context.step,
incoming: incoming,
outgoing: outgoing
};

log('step #'+(context.step), message)

return outgoing
}
const walk = value => {
return steps.reduce((from, to) => {
return takeStep(from, to(from))
}, value)
}

(before && steps.push(before)) + (after && steps.push(after))

return function invoke(state) {
const hasItems = Array.isArray(state) || !(state = [state])
const processed = state.map(walk)
return hasItems ? processed : processed[0]
}
}
}


https://jsfiddle.net/f7mdak6z/25/



I realize there's algebra going on with currying and maybe this is nonsensical, so we're not talking rigid math concepts. However, it seems to me this pattern is rudimentary and it feels like an application of currying over an input to achieve an output. takeStep() almost seems like a monad, etc.



I think it would definitely start to sound like a fit if the methods passed to generate() simply modified the stream, and perhaps the takeStep() function handled side-effects.










share|improve this question











$endgroup$












  • $begingroup$
    Currying is converting a function taking n arguments into series of n-1 functions each taking 1 argument. For example, currying foo = (a, b, c) => ... would be foo = a => b => c => .... Maybe you could clarify to which function do you refer to.
    $endgroup$
    – morbusg
    2 days ago






  • 1




    $begingroup$
    What does this code accomplish? Please tell us, and also make that the title of the question, as per the How to Ask guidelines. Note that there is a return purchase(item) that doesn't make sense since it's not within a function — please ensure that you have included enough code for the question to make sense.
    $endgroup$
    – 200_success
    2 days ago










  • $begingroup$
    @morbusg I use steps instead of arguments for the n series of functions, and invoke() is being called over the series of functions.
    $endgroup$
    – Jared Farrish
    2 days ago




















2












$begingroup$


Is doing something like this utilizing currying in a practical sense?



function processOneClickPurchase(item) {
let context = { step: 0 }

let addItemToCart = item => {
let cart = getSession().cart
cart.items.push(item)
log('Cart items', cart.items)
return cart
}

...

let purchase = generate([
addItemToCart,
makePurchase,
processBilling,
setupShipping,
sendPurchaseAndShippingNotification,
], null, cleanup)

return purchase(item)

function generate(steps, before, after) {
const takeStep = (incoming, outgoing) => {
let message = {
step: ++context.step,
incoming: incoming,
outgoing: outgoing
};

log('step #'+(context.step), message)

return outgoing
}
const walk = value => {
return steps.reduce((from, to) => {
return takeStep(from, to(from))
}, value)
}

(before && steps.push(before)) + (after && steps.push(after))

return function invoke(state) {
const hasItems = Array.isArray(state) || !(state = [state])
const processed = state.map(walk)
return hasItems ? processed : processed[0]
}
}
}


https://jsfiddle.net/f7mdak6z/25/



I realize there's algebra going on with currying and maybe this is nonsensical, so we're not talking rigid math concepts. However, it seems to me this pattern is rudimentary and it feels like an application of currying over an input to achieve an output. takeStep() almost seems like a monad, etc.



I think it would definitely start to sound like a fit if the methods passed to generate() simply modified the stream, and perhaps the takeStep() function handled side-effects.










share|improve this question











$endgroup$












  • $begingroup$
    Currying is converting a function taking n arguments into series of n-1 functions each taking 1 argument. For example, currying foo = (a, b, c) => ... would be foo = a => b => c => .... Maybe you could clarify to which function do you refer to.
    $endgroup$
    – morbusg
    2 days ago






  • 1




    $begingroup$
    What does this code accomplish? Please tell us, and also make that the title of the question, as per the How to Ask guidelines. Note that there is a return purchase(item) that doesn't make sense since it's not within a function — please ensure that you have included enough code for the question to make sense.
    $endgroup$
    – 200_success
    2 days ago










  • $begingroup$
    @morbusg I use steps instead of arguments for the n series of functions, and invoke() is being called over the series of functions.
    $endgroup$
    – Jared Farrish
    2 days ago
















2












2








2





$begingroup$


Is doing something like this utilizing currying in a practical sense?



function processOneClickPurchase(item) {
let context = { step: 0 }

let addItemToCart = item => {
let cart = getSession().cart
cart.items.push(item)
log('Cart items', cart.items)
return cart
}

...

let purchase = generate([
addItemToCart,
makePurchase,
processBilling,
setupShipping,
sendPurchaseAndShippingNotification,
], null, cleanup)

return purchase(item)

function generate(steps, before, after) {
const takeStep = (incoming, outgoing) => {
let message = {
step: ++context.step,
incoming: incoming,
outgoing: outgoing
};

log('step #'+(context.step), message)

return outgoing
}
const walk = value => {
return steps.reduce((from, to) => {
return takeStep(from, to(from))
}, value)
}

(before && steps.push(before)) + (after && steps.push(after))

return function invoke(state) {
const hasItems = Array.isArray(state) || !(state = [state])
const processed = state.map(walk)
return hasItems ? processed : processed[0]
}
}
}


https://jsfiddle.net/f7mdak6z/25/



I realize there's algebra going on with currying and maybe this is nonsensical, so we're not talking rigid math concepts. However, it seems to me this pattern is rudimentary and it feels like an application of currying over an input to achieve an output. takeStep() almost seems like a monad, etc.



I think it would definitely start to sound like a fit if the methods passed to generate() simply modified the stream, and perhaps the takeStep() function handled side-effects.










share|improve this question











$endgroup$




Is doing something like this utilizing currying in a practical sense?



function processOneClickPurchase(item) {
let context = { step: 0 }

let addItemToCart = item => {
let cart = getSession().cart
cart.items.push(item)
log('Cart items', cart.items)
return cart
}

...

let purchase = generate([
addItemToCart,
makePurchase,
processBilling,
setupShipping,
sendPurchaseAndShippingNotification,
], null, cleanup)

return purchase(item)

function generate(steps, before, after) {
const takeStep = (incoming, outgoing) => {
let message = {
step: ++context.step,
incoming: incoming,
outgoing: outgoing
};

log('step #'+(context.step), message)

return outgoing
}
const walk = value => {
return steps.reduce((from, to) => {
return takeStep(from, to(from))
}, value)
}

(before && steps.push(before)) + (after && steps.push(after))

return function invoke(state) {
const hasItems = Array.isArray(state) || !(state = [state])
const processed = state.map(walk)
return hasItems ? processed : processed[0]
}
}
}


https://jsfiddle.net/f7mdak6z/25/



I realize there's algebra going on with currying and maybe this is nonsensical, so we're not talking rigid math concepts. However, it seems to me this pattern is rudimentary and it feels like an application of currying over an input to achieve an output. takeStep() almost seems like a monad, etc.



I think it would definitely start to sound like a fit if the methods passed to generate() simply modified the stream, and perhaps the takeStep() function handled side-effects.







javascript functional-programming e-commerce






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 2 days ago









200_success

131k17157422




131k17157422










asked 2 days ago









Jared FarrishJared Farrish

22517




22517












  • $begingroup$
    Currying is converting a function taking n arguments into series of n-1 functions each taking 1 argument. For example, currying foo = (a, b, c) => ... would be foo = a => b => c => .... Maybe you could clarify to which function do you refer to.
    $endgroup$
    – morbusg
    2 days ago






  • 1




    $begingroup$
    What does this code accomplish? Please tell us, and also make that the title of the question, as per the How to Ask guidelines. Note that there is a return purchase(item) that doesn't make sense since it's not within a function — please ensure that you have included enough code for the question to make sense.
    $endgroup$
    – 200_success
    2 days ago










  • $begingroup$
    @morbusg I use steps instead of arguments for the n series of functions, and invoke() is being called over the series of functions.
    $endgroup$
    – Jared Farrish
    2 days ago




















  • $begingroup$
    Currying is converting a function taking n arguments into series of n-1 functions each taking 1 argument. For example, currying foo = (a, b, c) => ... would be foo = a => b => c => .... Maybe you could clarify to which function do you refer to.
    $endgroup$
    – morbusg
    2 days ago






  • 1




    $begingroup$
    What does this code accomplish? Please tell us, and also make that the title of the question, as per the How to Ask guidelines. Note that there is a return purchase(item) that doesn't make sense since it's not within a function — please ensure that you have included enough code for the question to make sense.
    $endgroup$
    – 200_success
    2 days ago










  • $begingroup$
    @morbusg I use steps instead of arguments for the n series of functions, and invoke() is being called over the series of functions.
    $endgroup$
    – Jared Farrish
    2 days ago


















$begingroup$
Currying is converting a function taking n arguments into series of n-1 functions each taking 1 argument. For example, currying foo = (a, b, c) => ... would be foo = a => b => c => .... Maybe you could clarify to which function do you refer to.
$endgroup$
– morbusg
2 days ago




$begingroup$
Currying is converting a function taking n arguments into series of n-1 functions each taking 1 argument. For example, currying foo = (a, b, c) => ... would be foo = a => b => c => .... Maybe you could clarify to which function do you refer to.
$endgroup$
– morbusg
2 days ago




1




1




$begingroup$
What does this code accomplish? Please tell us, and also make that the title of the question, as per the How to Ask guidelines. Note that there is a return purchase(item) that doesn't make sense since it's not within a function — please ensure that you have included enough code for the question to make sense.
$endgroup$
– 200_success
2 days ago




$begingroup$
What does this code accomplish? Please tell us, and also make that the title of the question, as per the How to Ask guidelines. Note that there is a return purchase(item) that doesn't make sense since it's not within a function — please ensure that you have included enough code for the question to make sense.
$endgroup$
– 200_success
2 days ago












$begingroup$
@morbusg I use steps instead of arguments for the n series of functions, and invoke() is being called over the series of functions.
$endgroup$
– Jared Farrish
2 days ago






$begingroup$
@morbusg I use steps instead of arguments for the n series of functions, and invoke() is being called over the series of functions.
$endgroup$
– Jared Farrish
2 days ago












0






active

oldest

votes












Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");

StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216979%2fexecuting-multiple-steps-to-handle-a-purchase-using-currying%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Code Review Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216979%2fexecuting-multiple-steps-to-handle-a-purchase-using-currying%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

is 'sed' thread safeWhat should someone know about using Python scripts in the shell?Nexenta bash script uses...

How do i solve the “ No module named 'mlxtend' ” issue on Jupyter?

Pilgersdorf Inhaltsverzeichnis Geografie | Geschichte | Bevölkerungsentwicklung | Politik | Kultur...