With `Base.@kwdef` (or the enhanced `@with_kw` from Parameters.jl) on the struct definition, that example can be:
m = App(name = "My program",
author = "Me, me@mail.com",
version = "1.0.2",
about = "Explains in brief what the program does",
arg = index(Arg("in_file"), 1)
which seems pretty nice to me.Also, there's Chain.jl for a better pipe operator, though I agree improvements to the Base pipe would be great.
To the original point, the problem with x.foo(y, z) is that it would be highly misleading in that it seems to suggest that x is somehow special to the dispatch of the call, which isn't true. While superficially it can feel more familiar, it would instead become a trap for people giving them a wrong mental model of the call's semantics.