Printing of an Expr seems wrong

No, because what you have is not a afield::Union{Nothing, Int32}. As you can see in the dump, the Union{Nothing, Int32} comes as a single symbol.

You can check what it should be with dump(:(afield::Union{Nothing, Int32}))