From ivo.welch at anderson.ucla.edu  Mon Feb  4 22:53:02 2013
From: ivo.welch at anderson.ucla.edu (ivo welch)
Date: Mon, 4 Feb 2013 13:53:02 -0800
Subject: [Rd] Contract Syntactic Sugar
Message-ID: <CAPr7RtX787PFPCYtqPROOnUSSgdSyPq9dq7yTF780q4syEA1jw@mail.gmail.com>

## the following is a dream: add some sugar syntax to allow for
contracts with teeth (in and out checking)

> is.positive <- function(x) (all(x>0))

> exponentiate <- function( x ::is.data.frame , exponent ::is.numeric is.positive)  :: is.vector is.numeric  {
    x$base :: is.positive        ## error also if base does not exist
in x; may need some special IQ
    x$base^exponent
}

should be self-explanatory.  anything that has '::' means "run what is
before through all the functions after and barf if it is not true".
any other operator rather than :: or other syntax would be as
good---this is just illustratory.  in the end, this code should be
viewed by R as the same as

> exponentiate <- function( x, exponent ) {
    stopifnot( is.data.frame(x) )
    stopifnot( is.numeric(exponent) )
    stopifnot( is.positive(exponent) )
    stopifnot( exists("base", "x") )
    stopifnot( is.positive( x$base ) )
    return.value <- x$base^exponent
    stopifnot( is.vector(return.value) )
    stopifnot( is.numeric(return.value) )
    return.value
 }

is this a feasible summer project for a student with a prospect of
inclusion of the completed code in the R core language itself if I pay
for the development time?  {or does better syntax already exist and I
am just ignorant (which I often am)?}

regards,

/iaw
----
Ivo Welch (ivo.welch at gmail.com)



[Rd] Contract Syntactic Sugar
ivo welch