simplify `typecheck` a bit by subdividing, try to handle cases where function decorated by another decorators(not typecheck, however it works only for decorators that uses functools.wraps).