Perl 6
SMOP map operator: Revision 2

The 'map' operator in Perl 6 is heavily functional, and is designed to ensure that it forces no eager evaluation of any of the input data.

 ... <== map { ... } <== ...

This may look simple at first, but then you have to realize how to traverse a List without knowing its size, specially when that list might autovivify as you traverse it. It gets worse when that list is also lazy.

The immediate alternative is providing Iterators. The Perl 6 spec still doesn't really speaks about it (besides implying the existence of an Iterator type), but they are indeed the only sane way I can think of to implement the traversal of a lazy list, with the implicit benefit of adding better support for cursor-based data (i.e. berkeley db btrees).

So far so good, but which API does the iterator implement? The Java language implements iterators in terms of "has_next", "next" calls, this might look ok, but it split a process of consuming an iterator into two steps, which is likely to produce problems with concurrency (like checking for eof before reading from a network socket). As TimToady exposed on irc, trying and failing produces saner semantics, so we end up with a single method in the Iterator API, as the specs seems to imply, prefix:<=>.

Upload Files

Click "Browse" to find the file you want to upload. When you click "Upload file" your file will be uploaded and added to the list of attachments for this page.

Maximum file size: 50MB

File Name Author Date Uploaded Size

Save Page As

Enter a meaningful and distinctive title for your page.

Page Title:

Tip: You'll be able to find this page later by using the title you choose.

Page Already Exists

There is already a page named XXX. Would you like to:

Save with a different name:

Save the page with the name "XXX"

Append your text to the bottom of the existing page named: "XXX"

Upload Files

Click "Browse" to find the file you want to upload. When you click "Add file" this file will be added to the list of attachments for this page, and uploaded when you save the page.

Add Tags

Enter a tag and click "Add tag". The tag will be saved when you save the page.