That’s a lot of new, effectively, keywords that you’re introducing. I don’t know if that’s a bad or a good thing, but I suspect the community will have a hard time with it. Otherwise this is a creative solution.
It uses effectively only the one keyword assure. The constraints look like fields on the type variables, which have an ambiguity with package private method expressions with the same name.
I would prefer naming that feels less procedural. I think of it like a guard so maybe `when` or `where`. It can also just be some punctuation like `| cond` `| another-cond`.