Ara,

I have not had such problems with exception traces.  Emacs parses the
trace, so I've never had a problem tracking exceptions down.

You said you disagreed about variable names, but I didn't make an
argument about variable names.  The argument was about needless
temporaries lying around and mucking up at-a-glance comprehension.
Those temporaries can be culled away nicely with Object#as.

   expanded = stems.map { |stem|
      "#{ stem }.#{ guess_extension stem }"
   }.as { |guesses|
      transform2(source_files + transform1(guesses))
   }.as { |basenames|
      basenames.map { |basename|
         File.join dir, basename
      }
   }

Of course transform1 and transform2 are bad names --- they are meant
to be bad!  They are intentionally generic for the purpose of the
example.  They stand for any function.

You gave the Filelist example as the preferred code, which is exactly
right.  However we are not talking about Filelist, but the
*implementation* of Filelist.

Could you clarify how the above code lends "strong support to bad
programming practices"?  That seems unfounded.  On the contrary, I
find it more appealing at least because (1) the intent of the code ---
to produce a value for 'expanded' --- is more obvious; (2) there are
no temporaries lying around which may potentially cause confusion in
future maintenance; (3) the logic flow is more obvious: three
consecutive operations, with the output of one fed into the input of
the next.

Exceptionally Kind Regards,
-FC