I'll be using Java in this post, but the following also applies to C#, and likely other languages.

We require that submissions must be a first-class function, or a full program to be valid.  In Java, many users have started using *untyped* lambdas as their submission.  **The problem with untyped lambdas is that they have no meaning** without their types.

For example, given a theoretical challenge of `Add Two Numbers`, in Java, a submission would look like:

    (a,b) -> a + b

which seems relatively reasonable.  However, the problem lies with the following solution:

    (a,b) -> a.add(b)

The problem with the above statement is that we have *absolutely no idea* which function is getting called.  The only way the above statement could *ever* work in code is if we say in the description that `a` and `b` are `BigInteger`.

To extend this problem further, lets say I'm answering a sorting challenge.  You could submit:

    list -> list.sortThis()

Now wait, `sortThis()` isn't a function on arrays, or on ArrayList, or anywhere in the JDK.  I'd have you tell you that `list` is a `MutableList` from Eclipse Collections for you to ever use the code.  Furthermore, if I *did* use that code, you don't need to import a MutableList.  Java is able to deduce the types, no import needed.

We require the submissions be self-contained, but right now, **these lambdas are not self-contained, because they require outside input to indicate the types**.

How do we solve this problem?