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

Has the BBC provided arguments for saying Brexit being cancelled is unlikely?

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

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

Mathematical cryptic clues

Why do falling prices hurt debtors?

To string or not to string

How do we improve the relationship with a client software team that performs poorly and is becoming less collaborative?

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

Why doesn't H₄O²⁺ exist?

Languages that we cannot (dis)prove to be Context-Free

How could an uplifted falcon's brain work?

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

Modeling an IPv4 Address

What does it mean to describe someone as a butt steak?

What is the word for reserving something for yourself before others do?

Did Shadowfax go to Valinor?

Prove that NP is closed under karp reduction?

Arthur Somervell: 1000 Exercises - Meaning of this notation

How is the claim "I am in New York only if I am in America" the same as "If I am in New York, then I am in America?

Is it important to consider tone, melody, and musical form while writing a song?

Why are electrically insulating heatsinks so rare? Is it just cost?

tikz: show 0 at the axis origin

TGV timetables / schedules?

How can bays and straits be determined in a procedurally generated map?



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)




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)




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)




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)




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 42 secs 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

名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

Prove that NP is closed under karp reduction?Space(n) not closed under Karp reductions - what about NTime(n)?Class P is closed under rotation?Prove or disprove that $NL$ is closed under polynomial many-one reductions$mathbfNC_2$ is closed under log-space reductionOn Karp reductionwhen can I know if a class (complexity) is closed under reduction (cook/karp)Check if class $PSPACE$ is closed under polyonomially space reductionIs NPSPACE also closed under polynomial-time reduction and under log-space reduction?Prove PSPACE is closed under complement?Prove PSPACE is closed under union?

Is my guitar’s action too high? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)Strings too stiff on a recently purchased acoustic guitar | Cort AD880CEIs the action of my guitar really high?Μy little finger is too weak to play guitarWith guitar, how long should I give my fingers to strengthen / callous?When playing a fret the guitar sounds mutedPlaying (Barre) chords up the guitar neckI think my guitar strings are wound too tight and I can't play barre chordsF barre chord on an SG guitarHow to find to the right strings of a barre chord by feel?High action on higher fret on my steel acoustic guitar