The short-term goal of vctrs specify the behavior of functions that combine different types of vectors. This will help reason about functions that combine different types of input (e.g. c(), ifelse(), rbind()). The vctrs type system encompasses base vectors (e.g. logical, numeric, character, list), S3 vectors (e.g. factor, ordered, Date, POSIXct), and data frames; and can be extended to deal with S3 vectors defined in other packages, as described in vignette("extending-vctrs"). Understanding and extending vctrs requires some effort from developers, but it is our hope that the package will be invisible to most users. Having an underlying theory that describes what type of thing a function should return will mean that you can build up an accurate mental model from day-to-day use, and you will be less surprised by new functions.