add isFunction()