The .. operator doesn’t support chaining like that.
One way to define custom constructor syntax is to use a string macro, which lets you parse expressions in any way that you want (completely independent of standard Julia syntax). For example:
julia> macro date_str(s)
args = Meta.parse.(split(s, '-'))
@date_str (macro with 1 method)
(Though I’m not convinced that this particular example is much clearer than just typing Date(2022, 4, 20), it certainly seems a lot clearer than 2022..4..20.)
PS. What you are describing is not a unary operator — it is a binary operator .. that you want to chain without using parentheses. I’m not sure why the .. doesn’t support chaining, but many other custom operators do, e.g.
First, while .. does not support chainning, so I have change it to ~; Second, It is also confusing that when calling 2022~1~1, It calls ~(1,1) firstly, then calls ~(2022,(1,1)). I thought it would be backward.