I think real(::Type{Dual{T}}) needs to be overriden:
julia> dual(1.0,1.0) ≈ dual(1.0,1.0)
ERROR: MethodError: no method matching real(::Type{DualNumbers.Dual{Float64}})
Closest candidates are:
real(::Complex{T<:Real}) at complex.jl:36
real(::Real) at complex.jl:38
real{T<:Real}(::Type{T<:Real}) at complex.jl:42
...
in isapprox(::DualNumbers.Dual{Float64}, ::DualNumbers.Dual{Float64}) at ./floatfuncs.jl:251
I think
real(::Type{Dual{T}})
needs to be overriden: