I've made UPARSE part of the mezzanine to make it easier to use in the web build.
It's a reminder that zero performance work has been done on it, and it is glacially slow.
But here it is extracting information from a GitLab URL
uparse port.spec.path [ "/" emit user: between <here> "/" emit repo: between <here> "/" [opt "-/"] "raw/" emit branch: between <here> "/" emit file_path: between <here> <end> ] then x -> [ replace/all x.file_path "/" "%2F" ; API uses slashes for its delimiting if port.spec.scheme = 'http [ port.spec.scheme: 'https write log:type=warn ["Converting non-HTTPS URL to HTTPS:" x.url] ] port.spec.path: join-all [ "/api/v4/projects/" x.user "%2F" x.repo ; surrogate for numeric id, use escaped `/` "/repository/files/" x.file_path "/raw?ref=" x.branch ] ]
Anyway, this is just an example of some fun usage of BETWEEN and a generated object. It avoids the to "/" skip or to "/" "/" pattern that's so annoying. And it means you can avoid naming locals for all the things you are extracting in a parse.
I'm thinking that use x would be changed to a construct that would pull all x's fields into scope. Right now there's an experiment for that called "using" but I like USE.
I'll do some performance work at some point, here. But I'm packing to relocate today, so I might be busy for a little bit...