As a side note, `sqrt(2*d/9.81)`

is the time a free falling body takes to travel a distance `d`

.

I’m afraid you have to explicitly access the field of your types where you store the value

```
velocity(dist::Distance, t) = dist.d / t
```

if you want to avoid overloading the needed methods. Which can be automated to some extend and need really only be done for arithmetic operations and powers. Anything else takes dimensionless arguments. Then however you find yourself in need of defining and handling a whole zoo of types. After all, the division of a `Distance`

and a `Time`

should yield a `Velocity`

, and so on. And you haven’t even considered units yet.

Or, you take what’s there already, embrace the power of `Unitful.jl`

(or the new `DynamicalQuantities`

DynamicQuantities.jl v0.7.0: fast and lightweight physical quantities) and dispatch on those types

```
julia> using Unitful
julia> velocity(g::Unitful.Acceleration, t::Unitful.Time) = g*t
velocity (generic function with 1 method)
julia> velocity(d::Unitful.Length, t::Unitful.Time) = d/t
velocity (generic function with 2 methods)
julia> g = 9.81u"m/s^2";
julia> velocity(g, 5u"s")
49.050000000000004 m s⁻¹
julia> velocity(5u"m", 10u"s")
0.5 m s⁻¹
```