[Rd] vctrs: a type system for the tidyverse

luke-tier@ey m@ili@g off uiow@@edu luke-tier@ey m@ili@g off uiow@@edu
Fri Aug 10 01:13:30 CEST 2018


Some ideas from the 'numeric tower' notion in scheme/lisp might also
be useful.

Best,

luke

On Thu, 9 Aug 2018, Hadley Wickham wrote:

> On Thu, Aug 9, 2018 at 4:26 PM jan Vitek <vitekj using icloud.com> wrote:
>>
>>> I'm now confident that I
>>> can avoid using "type" by itself, and instead always use it in a
>>> compound phrase (like type system) to avoid confusion. That leaves the
>>> `.type` argument to many vctrs functions. I'm considering change it to
>>> .prototype, because what you actually give it is a zero-length vector
>>> of the class you want, i.e. a prototype of the desired output. What do
>>> you think of prototype as a name?
>>
>>
>> The term “type system” in computer science is used in very different ways.
>> What the note describes is not a type system, but rather a set of
>> coercions used by a small number of functions in one package.
>>
>> Typically it refers to a set of rules (either statically enforced
>> by the compiler or dynamically enforced by the runtime) that ensure
>> that some particular category of errors can be caught by the
>> language.
>>
>> There is none of that here.
>
> I think there's a bit of that flavour here:
>
> vec_c(factor("a"), Sys.Date())
> #> Error: No common type for factor and date
>
> This isn't a type system imposed by the language, but I don't think
> that's a reason not to call it a type system.
>
> That said, I agree that calling it a type system is currently
> overselling it, and I have made your proposed change to the README
> (and added a very-long term goal of making a type system that could be
> applied using (e.g.) annotations).
>
>> "The short-term goal of vctrs is to develop a type system for vectors which 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”).”
>>
>> ==>
>>
>> The short-term goal of vctrs is to specify the behavior of functions that combine different types of vectors (e.g. c(), ifelse(), rbind()). The specification 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”).
>
> Thanks for the nice wording!
>
> Hadley
>
>
>

-- 
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:   luke-tierney using uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu


More information about the R-devel mailing list