added function type contracts