On Apr 27, 2012, at 7:05 PM, Niko Matsakis <[email protected]> wrote:
>
> Later, I would like to add str, map, and a variety of other types. For types
> (like str and map) where there are multiple possibilities for how to iterate,
> my plan is to use wrapper types like so:
>
> enum keys<K,V,M:map<K,V>> = &M;
>
> This wrapper would allow you to iterate over the keys in a map. You would
> use it something like:
>
> for keys(&map).each { |k| ... }
>
> This also allows things like
>
> keys(&map).map_to_vec { |k| ... }
Is the wrapper type necessary? I thought named implementations were
intended to allow multiple implementations without wrapping.
> Another example where I think such wrapper types would be helpful is for
> iterating over two slices in parallel. I planned to have an enum like:
>
> enum zip<A,B> {
> zip([A]/&, [B]/&)
> }
>
> which would implement the iterable interface for the type (&A, &B). And so
> forth.
Would the each() method of an iterator be resumable if you called it
again after stopping a previous iteration? If so, you could implement
a generic zip over any two iterators.
> ## Possible far future plans
>
> If we added support for higher-kinded types, we could support a `map()`
> method in the iteration trait. But until then we have `map_to_vec()`, which
> always results in a type of `[A]`. Maybe we should find a shorter name, to
> just do `iterable.to_vec().map()`. I dunno.
Could you implement a map<I,O,fn I -> O, iterable<I>> : iterable<O>
adapter without higher kinds?
-Joe
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev