I'm writing Kotlin code and one the features it has is extension methods, which are effectively the same as normal functions except the syntax you use looks like an instance method call.
Normal function
fun blah(x: Int) { println(x) }
val f = blah(1)
Extension method
fun Int.blah() { println(this) }
val f = 1.blah()
As far as I understand, C# extension methods work similarly.
In principle, literally any non-nullary function could be written as an extension method by moving the type of the first parameter to the left of the function name and adjusting the function body and call sites accordingly (as in this example).
Should I write all my functions as extension methods, then? None of them? What principle should I use to decide what functions to write normally, and which to write as an extension method of one of the inputs?