Re: Sequencing Wolfgang Corcoran-Mathe 31 Mar 2020 17:01 UTC

On 2020-03-30 15:06 -0400, John Cowan wrote:
>Makes sense. I have generalized these to accept any traversable container
>by passing a for-each procedure to take apart the container and a
>constructor to reassemble it.  I have also added an Either equivalent.
>
>On Mon, Mar 30, 2020 at 12:07 PM Arvydas Silanskas <
>xxxxxx@gmail.com> wrote:
>
>> I think it's missing sequencing, for which I personally reach quite often
>> when working with such monadic container types. Eg. for Maybe:
>>
>> (sequence-maybe lst)
>>
>> if all elements in lst are Just, returns Just of list, whose elements
>> correspond to unwrapped values in lst. If any element in lst is Nothing,
>> returns Nothing.
>>
>> (sequence-maybe (list (just 'a) (just 'b))) == (just (list 'a 'b))
>> (sequence-maybe (list (just 'a) (nothing))) == (nothing)

I think this is a very useful addition.  One thought is that, since
a `sequence' operation can be generalized to any type with a `bind'
operation, it could be defined in a future "monads" SRFI rather than
being implemented (twice!) here.

Regards,

--
Wolfgang Corcoran-Mathe  <xxxxxx@sigwinch.xyz>

"Scientists must be optimists at heart, in order to block out the
incessant chorus of those who say 'It cannot be done.'"
--Academician Prokhor Zakharov