There’s been some discussion about this. The problem is that we have conflicting rules in this case, since we also usually put I/O streams as first arguments so that the do syntax works (see e.g. open) (EDIT: this is wrong, see below). IIRC it’s been decided that I/O streams take priority over return type parameters for that reason.
I thought it was functions that took precedence as the first argument because of the do syntax (open returns an I/O stream, but the body of the do becomes an anonymous function with is the first argument to open), not I/O streams.
Woops, yes, actually I confused read with open. We don’t actually care about passing the I/O stream as the first argument, that’s only useful for functions. So whether to pass the I/O stream or the type as first argument is mostly arbitrary.
In this case, I think the more important factor is that the first argument (I/O stream or filename) is always needed, but the type to read it into is optional.
I wouldn’t like to have to put String in 99% of the time, just to be consistent with the “rule” that the type should go first.
I wonder why Jeff considered convert an exception?
Type is #4, and Value is #7, so that follows Jeff’s list.
I’m not aware of any convert methods that allow 1,2, or 3.
For convert, the ordering also makes a lot of sense given the similarity to constructors and the order that assignment works: dest = source, so DestType(source) or convert(DestType, source) all scan well.