I prefer the first one. The interface must be explicit and explicitly return an extractor of the correct type. Anything returning `object` or `mixed` is no good