In addition, since users will normally construct request objects but not access their fields, a dictionary is easier to construct. If it's just an alist, quasiquote; if it's a hash table, the hash-table procedure (which accepts alternating keys and values), etc. Record constructors in Scheme are by order of arguments (aka "boa constructors"), which is hard to handle with more than a few components. So then we get to pointlessly mutable objects, and people reusing them badly, and general messiness.