小编che*_*ast的帖子

功能构成与Monads ......无法正常工作

我有一些丑陋的数据,需要大量丑陋的空检查.我的目标是编写一套函数来以无点的声明式样式访问/修改它,使用Maybe monad将空检查保持在最低限度.理想情况下,我可以将Ramda与monad一起使用,但它的效果并不是很好.

这有效:

const Maybe = require('maybe');
const R = require('ramda');
const curry = fn => (...args) => fn.bind(null, ...args);
const map = curry((fn, monad) => (monad.isNothing()) ? monad : Maybe(fn(monad.value())));
const pipe = (...fns) => acc => fns.reduce((m, f) => map(f)(m), acc);
const getOrElse = curry((opt, monad) => monad.isNothing() ? opt : monad.value());
const Either = (val, d) => val ? val : d;

const fullName = (person, alternative, index) => R.pipe(
  map(R.prop('names')),
  map(R.nth(Either(index, 0))),
  map(R.prop('value')),
  map(R.split('/')),
  map(R.join('')),
  getOrElse(Either(alternative, …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming ramda.js

2
推荐指数
1
解决办法
397
查看次数