In Ruby? It's hell! What are those parameters? Which methods does it support? Is it nil?
In Clojure? A breeze. Data is just data, no behaviour. Destructuring shows what a function requires right in the parameter definition. You are already using schemas for validation so you can annotate them in all the functions that receive/return them.
IMO dynamically typed OO languages scale very poorly with codebase size, unlike their statically typed counterparts.