list_t reverse(list_t list) { return reverse_helper(list, list_make()); }
static constexpr auto apply(Xs&& xs) { constexpr std::size_t N = hana::value<decltype(hana::length(xs))>(); return reverse_helper(static_cast<Xs&&>(xs), std::make_index_sequence<N>{}); }
static list_t reverse_helper(list_t list, list_t reversed) { if (list_isEmpty(list)) return reversed; return reverse_helper(list_rest(list), list_make(list_first(list), reversed)); }