Curry flavored promises
lhorie.github.io
lhorie.github.io
Thanks for the feedback! Just wanted to clarify some points:
I should probably have noted that the usage of console.log is illustrative and is typically only used for debugging (the idea being that console.log could be used in Firefox, or you could wrap it in a log helper function, or use alert or whatever).
Typically, in a Mithril app, you'd either assign the promise to a variable or bind to an m.prop at the end of the chain, as per the docs on web services ( http://lhorie.github.io/mithril/web-services.html )
Regarding console.log returning undefined: Mithril does deviate from A+ promises (again, as per the docs - http://lhorie.github.io/mithril/mithril.deferred.html ). The reason for the spec deviation is precisely to allow the use case of mixing procedural impurity into a chain (whereas the undefined case covered by the spec isn't really useful, given that undefined is the lack of a value, as opposed to null, which is a value with no meaning).
@anaphor: huh, reading about currying again, you're right. Little misunderstanding on my part. Sorry about that.
No it isn't, that's partial application. Currying is (lambda (a b c) ...) => (lambda (a) (lambda (b) (lambda (c) ...))) generalized to any number of parameters.
//here's an AJAX request and a chain of promises
m.request({method: "GET", url: "/api/projects"})
.then(console.log) // log all projects
.then(pastItems) // filter past projects
.then(console.log) // log past projects only
The calls to console.log will not work.You need to do this:
.then(function() { console.log(arguments); })
Or this: .then(console.log.bind(console))I propose 'parry' for "partial application", to satisfy the punsters without compromising accuracy.
On firefox I get
>>> console.log.call(undefined, "Hi")
Hi console.log.bind(console)
doesn't work in old IE you need to do Function.prototype.bind.call(console.log, console)However, with unbound console.log the code doesn't work at all, this is the case in Chrome for example.
sum_of_cubes = total_sum.(lambda { |x| x^3} )
sum_of_cubes.(1,2)
In ruby way