我有这样的单子数组
[Left("a"), Left("b"), Left("c")]
我想将其转换为这种形状
Left(["a", "b", "c"])
我该怎么做?
是否有专门的操作员来做这样的事情?还是我应该自己写?
答案 0 :(得分:3)
正如评论所建议的那样,这对于Either.Left
类型来说是一个不寻常的功能。 Ramda的sequence
可与Either.Right
一起使用:
console .log (
sequence (of, [Right('a'), Right ('b'), Right ('c')] ) //~> Right (['a', 'b', 'c'])
)
<script src="//bundle.run/ramda@0.26.1"></script>
<script src="//bundle.run/ramda-fantasy@0.8.0"></script>
<script>const {sequence} = ramda, {Either: {Left, Right, of}} = ramdaFantasy</script>
但这是因为Right
表示成功处理并带有结果值,而Left
表示失败将停止进一步的处理。与Maybe
相似,除了它捕获导致处理中断的初始错误。
还有其他类型可以捕获多个错误。例如,来自Folktale或Monet的Validation
类型捕获多个错误,但是这些错误通常将被包装在单个Failure
实例中,而不是在它们的数组中。
很明显,您可以为此编写自己的函数,但是不太可能遵循明确的法律。