24 auto& w = type->world();
25 auto callee = c->as<
App>();
26 auto is_os = callee->
arg();
27 auto [n_i, Is, n_o, Os, f] = is_os->
projs<5>();
28 auto [r, s] = callee->decurry()->args<2>();
37 if (lr && ls && *lr == 1 && *ls == 1)
return w.app(f, arg);
40 auto args = arg->
projs(*l_in);
42 if (lr && std::ranges::all_of(args, [](
const Def* arg) {
return arg->isa<
Tuple,
Pack>(); })) {
43 auto shapes = s->projs(*lr);
47 auto elems =
DefVec(*s_n, [&, f = f](
size_t s_i) {
48 auto inner_args =
DefVec(args.size(), [&](
size_t i) { return args[i]->proj(*s_n, s_i); });
50 return w.app(f, inner_args);
52 auto app_zip = w.app(w.annex<
zip>(), {w.lit_nat(*lr - 1), w.tuple(shapes.view().subspan(1))});
53 return w.app(w.app(app_zip, is_os), inner_args);
56 return w.tuple(elems);