Как отмечается в комментариях, это будет необычная функция для типа Either.Left
. 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
, за исключением того, что оно фиксирует первоначальную ошибку, которая остановила обработку.
Существуют другие типы, которые фиксируют множественные ошибки. Например, типы Validation
из Folktale или Monet фиксируют несколько ошибок, но обычно они заключаются в один экземпляр Failure
, а не в их массив.
Очевидно, что вы можете написать свою собственную функцию для этого, но вряд ли она будет соответствовать четко определенным законам.