I still think there’s some yet-to-be-designed way to express that `Complex{Dual{Float64}}`

and `Dual{Complex{Float64}}`

are different names for the same “thing”: a number with four basis elements (1, im, eps, im*eps). I can’t think of any situation in which the two spellings should be treated differently, or why any spelling should be prohibited. They should be mutually `reinterpret`

-able into each other.

I think this is related to:

1 https://en.wikipedia.org/wiki/AOS_and_SOA

2. https://en.wikipedia.org/wiki/Structural_type_system

There are several issues with trying to treat these the same. Probably, right now,

`real(Complex{Dual{Float64}})::Dual{Float64}`

and `real(Dual{Complex{Float64}})::Complex{Float64}`

, when actually in different situations you might want either of these, or also `real(Dual{Complex{Float64}})::Float64`

.

I’m not confident this is the appropriate analogy, but

```
julia> AoS = [(1,2),(3,4)]
2-element Array{Tuple{Int64,Int64},1}:
(1, 2)
(3, 4)
julia> SoA = ([1,3],[2,4])
([1, 3], [2, 4])
julia> first(AoS)
(1, 2)
julia> first.(SoA)
(1, 2)
julia> first(SoA)
2-element Array{Int64,1}:
1
3
julia> first.(AoS)
2-element Array{Int64,1}:
1
3
```