but, why would a non-function be passed to `done`, `fail` or `then` ?
if `.fn` is not a function, then it's a bug elsewhere :/