How does Scala's apply() method magic work?
In Scala, if I define a method called apply in a class or a top-level object, that method will be called whenever I append a pair a parentheses to an instance of that class, and put the appropriate arguments for apply() in between them.  e.g.,

    class Foo(x: Int) {
      def apply(y: Int) = {
        x*x + y*y
      }
    }

    val f = new Foo(3)
    f(4)   // returns 25

So basically, < object >(< args >) is just syntactic sugar for < object >.apply(< args >).  But here's my question: how does Scala do this conversion?  Is there a globally defined implicit conversion going on here, similar to the implicit type conversions in the Predef object (but different in kind)?  Or is it some deeper magic?  I ask because it seems like Scala strongly favors consistent application of a smaller set of rules, rather than many rules with many exceptions.  This initially seems like an exception to me, but I thought I'd ask to see if anyone with a deeper understanding of the language could explain to me how this fits in.
How does Scala's apply() method magic work?
===

In Scala, if I define a method called apply in a class or a top-level object, that method will be called whenever I append a pair a parentheses to an instance of that class, and put the appropriate arguments for apply() in between them.  e.g.,

    class Foo(x: Int) {
      def apply(y: Int) = {
        x*x + y*y
      }
    }

    val f = new Foo(3)
    f(4)   // returns 25

So basically, < object >(< args >) is just syntactic sugar for < object >.apply(< args >).  But here's my question: how does Scala do this conversion?  Is there a globally defined implicit conversion going on here, similar to the implicit type conversions in the Predef object (but different in kind)?  Or is it some deeper magic?  I ask because it seems like Scala strongly favors consistent application of a smaller set of rules, rather than many rules with many exceptions.  This initially seems like an exception to me, but I thought I'd ask to see if anyone with a deeper understanding of the language could explain to me how this fits in.