Name:
Anonymous
2017-07-03 15:03
Behold the benefits of Haskell:
function getUserBanner(banners, user) {
if ((user !== null)
&& (user.accountDetails !== undefined)
&& (user.accountDetails.address !== undefined)) {
return banners[user.accountDetails.address.province];
}
}
Dirty, imperative code is transformed into pure monads and functors.
var pipe = require('ramda').pipe;
var bannerEl = Maybe.of(document.querySelector('.banner > img'));
var applyBanner = curry(function(el, banner) { el.src = banner; return el; });
var curry = require('ramda').curry;
var applyBanner = curry(function(el, banner) {
el.src = banner;
return el;
});
var liftA2 = curry(function(fn, m1, m2) {
return m1.map(fn).ap(m2);
});
// customiseBanner :: Monad m => String -> m DOMElement
var customiseBanner = pipe(
Maybe.of,
map(R.path(['accountDetails', 'address', 'province'])),
liftA2(applyBanner, bannerEl)
);
customiseBanner(user);