hypothetical safe function constructor
will have to make func compatible with bind()