0

我正在使用ramda-fantasy单子。我在 a may 中有一个字符串,还有一些函数将对字符串执行正则表达式匹配并返回 a Maybe String

如何映射可能以应用所有功能并连接结果?

我有

const fieldRetrievers = [ 
  getAddress,
  getName,
  getPhone, 
]

const text = Maybe.of("a text")

// I want to define
// List (String -> Maybe String) -> Maybe String -> Maybe String
function getInfo(retrievers, maybeText) {...}

我怎样才能做到这一点?

4

1 回答 1

1

您正在寻找composeK,单子结构(“kleisli 箭头”)上的函数组合。

基本上,您的结果函数应该重复chain输入:

text.chain(getAddress).chain(getName).chain(getPhone)

您可以使用reduce一系列函数来实现:

R.reduce((m, f) => m.chain(f), text, fieldRetrievers)

所以你会写

const getInfo = R.flip(R.reduce(R.flip(R.chain)))
于 2016-12-15T18:19:21.257 回答