title: Why the main routine in Kotlin is accepted as a single-expression?
body: <p>The entry point of the c-like languages is almost identical, so Kotlin's <code>fun main() {}</code></p>
  
  <p>This is quite understandable for me, however; when using this routine as a single-expression function and (assign?) it any output method it will be compiled and print the parameter's value of the print method not its return type (which is <code>Unit</code>).  I guess this snippet will make it clear..</p>
  
  <pre><code>fun main() = print("Do I return something?")
  </code></pre>
  
  <p>This will be compiled as a basic hello world program!</p>
  
  <ul>
  <li>Why is this acceptably compiled? does the main method returns something else than the 0?</li>
  <li>Is the equal operator acts as assignment operator? and if so; what does the <code>print()</code> method returns? is it something other than <code>Unit</code>?</li>
  <li>If so, why it returns <code>Unit</code> when assign it to a variable?</li>
  </ul>
  
  <pre><code>fun main() {
      val x= println()
      print(x)
  }
  </code></pre>
  
  <p>Then also, why it doesn't return <code>Unit</code> in this case:</p>
  
  <pre><code>fun main() = foo()
  fun foo(): Unit {}
  </code></pre>