implement apply-geenric