No.  If it wasn't clear, my preference is container > traversable > sequenceable.  To me, sequence implies predetermined order of multiple elements more strongly.
If we employ the term traversable from now on it's ok, but in that case, can the name be map-traversable or something?


On Fri, Jun 5, 2020 at 10:14 AM John Cowan <xxxxxx@ccil.org> wrote:
Note that Traversable is a Haskell typeclass, a subclass of Functor and Foldable.  I could have called the argument 'functor', but I think 'traversable' is clearer.  The map argument needs to be able to map the unwrapped and aggregated elements of the traversable argument and return another traversalbe which can then be wrapped.  If you think it's better to change the name traversable to sequenceable-collection (which is Smalltalk) or just sequenceable, I can do that.

On Thu, Jun 4, 2020 at 11:07 PM Shiro Kawai <xxxxxx@gmail.com> wrote:
Argh, still wrong.  This is it:

traversable :: Container Maybe a*
cmap :: (Maybe a* -> b) -> Container Maybe a* -> Container b
aggregator :: a* -> b
result :: Maybe Container b

On Thu, Jun 4, 2020 at 5:06 PM Shiro Kawai <xxxxxx@gmail.com> wrote:
And the return value of maybe-sequence is Maybe Container b.
So, the fixed version:

(maybe-sequence traversable cmap aggregator) => result

traversable :: Container Maybe a*
cmap :: (Maybe a* -> Maybe b) -> Container Maybe a* -> Container b
aggregator :: a* -> b
result :: Maybe Container b

On Thu, Jun 4, 2020 at 5:04 PM Shiro Kawai <xxxxxx@gmail.com> wrote:
Correction: Cmap's type must be like this:

cmap :: (Maybe a* -> b) -> Container Maybe a* -> Container b


On Thu, Jun 4, 2020 at 3:59 PM Shiro Kawai <xxxxxx@gmail.com> wrote:
So, borrowing Haskell notation, types of 
(maybe-sequence traversable cmap aggregator) => result
would be something like:

traversable :: Container Maybe a*
cmap :: (Maybe a* -> Maybe b) -> Container Maybe a* -> Container Maybe b
aggregator :: a* -> b
result :: Maybe Container Maybe b

(a* means possibly multiple values.  ignore the difference such as currying etc.)

I had some difficulty to decode the meaning of "sequenceable" or "traversable" in the spec.  It really is any kind of wrapper of type 'F x' on which fmap :: (a -> b) -> F a -> F b is definable.

I think "sequence" or "sequenceable" suggests it is some kind of ordered set of elements, and too limiting for what the argument actually is.  "Traversable" seems broader, not so strict about the order, but still suggests collection of multiple values.  It is logically true that a single-value container is still traversable, but can be misleading.

Ideally we define all those abstract terms first, but in practice I guess they will emerge after many specs and implementations.  At this moment, I think "container" or "wrapper" reflects what the function actually does.