contracts for functions
 -- new syntax for generating arbitrary 'check' combinators
 -- allows contracts for arguments/return values which are themselves functions