Skip to content

Instantly share code, notes, and snippets.

@francisrstokes
Created December 21, 2018 18:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save francisrstokes/be404dd8aed5251bf02f93c5ee8c0e81 to your computer and use it in GitHub Desktop.
Save francisrstokes/be404dd8aed5251bf02f93c5ee8c0e81 to your computer and use it in GitHub Desktop.
const ArrayMonad = xs => {
const map = fn => ArrayMonad(xs.map(x => fn(x)))
const chain = fn => ArrayMonad(xs.reduce((ys, x) => [...ys, ...fn(x).xs], []))
const ap = mys => chain(f => mys['fantasy-land/map'](y => f(y)));
return {
xs,
'fantasy-land/map': map,
'fantasy-land/chain': chain,
'fantasy-land/ap': ap,
'constructor': ArrayMonad
};
};
ArrayMonad['fantasy-land/of'] = x => ArrayMonad([x]);
module.exports = ArrayMonad;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment