title: Kotlin extension lambdas vs regular lambdas
body: <p>According to the following source code it seems that regular lambdas are interchangeable with extension lambdas.</p>
  
  <pre><code>fun main(args: Array&lt;String&gt;) {
  
      val numbers = listOf(1, 2, 3)
  
      filter(numbers, predicate)
      filter(numbers, otherPredicate)
  
      println("PREDICATE: ${predicate} " +
          "\nOTHERPREDICATE: ${otherPredicate} " +
          "\nEQUALITY: ${predicate==otherPredicate}")
  }
  
  val predicate : Int.() -&gt; Boolean = {this % 2 != 0}
  val otherPredicate : (Int) -&gt; Boolean = {it % 2 != 0}
  
  
  fun filter(list: List&lt;Int&gt;, predicate:(Int) -&gt; Boolean) {
      for(number in list){
          if(predicate(number)){
              println(number)
          }
      }
  }
  </code></pre>
  
  <p>The output (I care about), is the following:</p>
  
  <pre><code>PREDICATE: kotlin.Int.() -&gt; kotlin.Boolean 
  OTHERPREDICATE: (kotlin.Int) -&gt; kotlin.Boolean 
  EQUALITY: false
  </code></pre>
  
  <p>The question is why are these lambdas interchangeable? Shouldn't be something different? Is the compiler doing something "smart" under the hood?</p>