Raven supports method overloading, so you can define a function multiple times for different kinds of inputs.
fn describe(x: Integer) { "a whole number" } fn describe(x: Float64) { "a decimal number" } test describe(1) == "a whole number" test describe(1.5) == "a decimal number" describe looks from the outside like a single function. But when you call it, it’ll switch to the right implementation based on the inputs you provided.