Comment by nerdponx
I have some questions that are not answered by the homepage.
1) How does this work with function parameters that are intended to be captured unevaluated with substitute()? Do you type the input as "any" and document separately that the parameter is kept "unevaluated" as a symbol/name or call?
2) How does this work with existing untyped R code? Does it at least include types for the standard library (or some subset thereof?)
3) Is there any type inference, or does it require explicit type annotation everywhere?
4) How do you propose to handle NA (which can appear "within" any typed vector)? Does the compiler support refinement types? If not, how does checking for and preventing nullability work, when checking for NA values requires a runtime check?
5) How do data frames work? Are they typed like structs?
6) Which object systems does it support, if any? S3, S4, Reference Classes, or the 3rd-party R6?
As much as I like static types, I feel like R is maybe the language where I need or want them the _least_. How often do you really run into a situation where you pass a character vector to a function that requires a numeric vector and it crashes your program?
99% of the time what you really want is known-valid data frames for data processing, and statically-sized arrays for math stuff.
> As much as I like static types, I feel like R is maybe the language where I need or want them the _least_.
I really disagree with this.
I think one of the whole reason there is a whole Tidyverse ecosystem that the behavior of (some) R code is unintuitive in a way that adding typing would absolutely improve.
It seems like you're deeply familiar with the R ecosystem, but as a user what I want is a safe subset of R that I can use.
> How often do you really run into a situation where you pass a character vector to a function that requires a numeric vector and it crashes your program?
In R the more likely situation is that you pass in the wrong typed thing and it silently continues with very unexpected values being passed, causing trouble or errors much later in the program. Which is very much a problem that typing helps with.