docs: public static <T> T lambda( MethodHandles.Lookup caller, Class<T> type, MethodHandle target,
                                  TypedArgument... arguments )
      {
          Method sam = sam( type );
          Class<?>[] samParameters = sam.getParameterTypes();
          List<Class<?>> targetParameters = new ArrayList<>( samParameters.length + arguments.length );
          Class<?>[] argParameters = types( arguments );
          addAll( targetParameters, argParameters );
          addAll( targetParameters, samParameters );
          CallSite site;
          try
          {
              site = metafactory(
                      caller,
                      sam.getName(), // the name of the interface method
                      methodType( type, argParameters ), // the signature of the generated call site (invoked below)
                      methodType( sam.getReturnType(), samParameters ), // the signature of the interface method
                      target, // the method to invoke
                      methodType( sam.getReturnType(), targetParameters ) );// the signature of the method to invoke
          }
          catch ( Exception e )
          {
              throw new IllegalArgumentException( String.format(
                      "Cannot create lambda for %s.%s(%s)%s from method (%s)%s [actual signature: %s] by invoking (%s)%s",
                      type.getSimpleName(), sam.getName(),
                      Stream.of( samParameters ).map( Class::getSimpleName ).collect( joining( "," ) ),
                      sam.getReturnType().getSimpleName(),
                      targetParameters.stream().map( Class::getSimpleName ).collect( joining( "," ) ),
                      sam.getReturnType().getSimpleName(),
                      target.type(),
                      Stream.of( argParameters ).map( Class::getSimpleName ).collect( joining( "," ) ),
                      type.getSimpleName() ), e );
          }
          try
          {
              return type.cast( site.dynamicInvoker().invokeWithArguments( values( arguments ) ) );
          }
          catch ( Throwable e )
          {
              throw new IllegalStateException( "Failure when creating lambda.", e );
          }
      }