Complexifying pi

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.