\documentclass{article} \begin{document} This package presents a concept that is currently missing from the R language and environment. R is a dynamic, interpreted language. There is no need to declare variables and certainly no need to constrain a variable to have a particular type. Rather, variables are merely names for values. This is very convenient for interactive and casual ``programming'' in the environment which was the primary motivation for S and R. However, we are increasingly developing software written in the language itself, in contrast with simple scripts or interactive commands that best suit the loosely typed language. One of the primary differences between writing code interactively and developing software is the need to make the software robust and handle many types of errors. Programmers familiar with strongly typed languages such as C and Java will welcome the dynamic nature of R, but when developing software, the lack of checks in the code require the developer to explicitly add them. In C and Java, the compiler catches many such errors without any need for explicit testing by the developer. Instead, she is required to specify the expected types of the values for parameters of routines/functions and variables used in the routines. In R, tests for the types of inputs must be added explicitly to the body of the function, mixing the actual computations of the function with these tests for sane inputs from the caller. In addition to helping to identify programming errors by programmers, the type information on variables and parameters provides queryable meta-data that can be used to programmatically process the code. It allows us, for example, to generate interfaces between one language and the compiled code. This information is essential as software becomes more component-oriented and dispersed. The ability to simplify and automate the connectivity in a safe, reliable manner becomes increasingly important. The Omegahat language married together aspects of both the S and Java languages, maintaining the interactive use but allowing for optional type specification of parameters of routines and variables. This package attempts to provide some of these facilities for R. There are two aspects to this package. The first is the specification of the type information, and the second is the application of that type information to validate the inputs to a function call. \end{document}