Since Julia has many float types (and users can define new ones), providing a value of \pi in all of them makes sense. One could imagine an interface like
get_π(::Type{T}) where {T <: AbstractFloat} = ...
The Irrational
type provides an analogous solution: in most cases
op(π, x::T)
is equivalent to
op(get_π(T), x)
ie the type is resolved on demand.
Of course the analogy breaks when there is no other type that can be used to resolve the desired type. Nevertheless, it is still a neat interface when you think about it.