Executing multiple steps to handle a purchase using curryingWhat are practical issues using this code with common JavaScript libraries?Currying in MatlabCurrying addition function in ECMAScript 6Secret Santa Application : Practical Interview TestControlling Finances with Web Development

Is a tag line useful on a cover?

What would happen to a modern skyscraper if it rains micro blackholes?

Email Account under attack (really) - anything I can do?

Adding span tags within wp_list_pages list items

Can I ask the recruiters in my resume to put the reason why I am rejected?

An academic/student plagiarism

A newer friend of my brother's gave him a load of baseball cards that are supposedly extremely valuable. Is this a scam?

Font hinting is lost in Chrome-like browsers (for some languages )

Can divisibility rules for digits be generalized to sum of digits

How is it possible to have an ability score that is less than 3?

Have astronauts in space suits ever taken selfies? If so, how?

Show that if two triangles built on parallel lines, with equal bases have the same perimeter only if they are congruent.

Why are 150k or 200k jobs considered good when there are 300k+ births a month?

Why do I get two different answers for this counting problem?

Mage Armor with Defense fighting style (for Adventurers League bladeslinger)

tikz: show 0 at the axis origin

Why "Having chlorophyll without photosynthesis is actually very dangerous" and "like living with a bomb"?

How did the USSR manage to innovate in an environment characterized by government censorship and high bureaucracy?

Risk of getting Chronic Wasting Disease (CWD) in the United States?

What are these boxed doors outside store fronts in New York?

Modeling an IPv4 Address

Do I have a twin with permutated remainders?

Fencing style for blades that can attack from a distance

Why doesn't H₄O²⁺ exist?



Executing multiple steps to handle a purchase using currying


What are practical issues using this code with common JavaScript libraries?Currying in MatlabCurrying addition function in ECMAScript 6Secret Santa Application : Practical Interview TestControlling Finances with Web Development






.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) !(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
    8 hours 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
    5 hours 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
    1 hour 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) !(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
    8 hours 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
    5 hours 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
    1 hour 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) !(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) !(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 1 min ago









200_success

131k17157422




131k17157422










asked 11 hours 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
    8 hours 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
    5 hours 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
    1 hour 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
    8 hours 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
    5 hours 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
    1 hour 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
8 hours 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
8 hours 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
5 hours 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
5 hours 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
1 hour 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
1 hour 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

कुँवर स्रोत दिक्चालन सूची"कुँवर""राणा कुँवरके वंशावली"

Why is a white electrical wire connected to 2 black wires?How to wire a light fixture with 3 white wires in box?How should I wire a ceiling fan when there's only three wires in the box?Two white, two black, two ground, and red wire in ceiling box connected to switchWhy is there a white wire connected to multiple black wires in my light box?How to wire a light with two white wires and one black wireReplace light switch connected to a power outlet with dimmer - two black wires to one black and redHow to wire a light with multiple black/white/green wires from the ceiling?Ceiling box has 2 black and white wires but fan/ light only has 1 of eachWhy neutral wire connected to load wire?Switch with 2 black, 2 white, 2 ground and 1 red wire connected to ceiling light and a receptacle?

चैत्य भूमि चित्र दीर्घा सन्दर्भ बाहरी कडियाँ दिक्चालन सूची"Chaitya Bhoomi""Chaitya Bhoomi: Statue of Equality in India""Dadar Chaitya Bhoomi: Statue of Equality in India""Ambedkar memorial: Centre okays transfer of Indu Mill land"चैत्यभमि