а мне вот больше нравится статическая типизация с автоматическим приведением типов. например, на пхп я её эмулирую так:
function getTitle( $dom ){
so_dom::ensure( $dom );
return (string) $dom->select(' / html / title ');
}
в эту функцию можно передать строку, структуру из массивов, инстанс so_file или so_dom.. и это будет работать правильно. приводить типы вручную перед вызовом функции - слишком много копипасты получится. делать семейство функций на каждый тип - тоже.