class BindingToConstructor<T> extends Binding<T> {
        final TupleConstructorN<T> constructor;
        final Key<?>[] args;

        BindingToConstructor(
                Key<? extends T> key, TupleConstructorN<T> constructor, Key<?>[] dependencies, int priority) {
            super(key, new HashSet<>(Arrays.asList(dependencies)), null, priority);
            this.constructor = constructor;
            this.args = dependencies;
        }

        @Override
        public Supplier<T> compile(Function<Key<?>, Supplier<?>> compiler) {<FILL_FUNCTION_BODY>}

        @Override
        public String toString() {
            return "BindingToConstructor[" + constructor + "]" + getDependencies();
        }
    }

            return () -> {
                Object[] args =
                        Stream.of(this.args).map(compiler).map(Supplier::get).toArray();
                return constructor.create(args);
            };
        
<no_super_class>