main() {}
testClosureAsParameterType(U Function<T, U>(T, U Function(T)) f) {}
testDependencyCycle(Map<T, U> Function<T, U>(T Function(U), U Function(T)) f) {}
testEarlierNamedParameter(
    void Function<T>({required void Function(T) a, required T b}) f) {}
testEarlierNamedParameterDependsOnUnnamedParameter(
    void Function<T>(T b, {required void Function(T) a}) f) {}
testEarlierUnnamedParameter(void Function<T>(void Function(T), T) f) {}
testFold(List<int> list) {}
testLaterNamedParameter(
    void Function<T>({required T a, required void Function(T) b}) f) {}
testLaterUnnamedParameter(void Function<T>(T, void Function(T)) f) {}
testLaterUnnamedParameterDependsOnNamedParameter(
    void Function<T>(void Function(T), {required T a}) f) {}
testLongDependencyChain(
    V Function<T, U, V>(T Function(), U Function(T), V Function(U)) f) {}
testNecessaryDueToWrongExplicitParameterType(List<int> list) {}
testParenthesized(void Function<T>(T, void Function(T)) f) {}
testParenthesizedNamed(
    void Function<T>({required T a, required void Function(T) b}) f) {}
testParenthesizedTwice(void Function<T>(T, void Function(T)) f) {}
testParenthesizedTwiceNamed(
    void Function<T>({required T a, required void Function(T) b}) f) {}
testPropagateFromContravariantReturnType(
    U Function<T, U>(void Function(T) Function(), U Function(T)) f) {}
testPropagateToContravariantParameterType(
    U Function<T, U>(T Function(), U Function(void Function(T))) f) {}
testPropagateToEarlierClosure(
    U Function<T, U>(U Function(T), T Function()) f) {}
testPropagateToLaterClosure(U Function<T, U>(T Function(), U Function(T)) f) {}
testPropagateToReturnType(U Function<T, U>(T, U Function(T)) f) {}
testReturnTypeRefersToMultipleTypeVars(
    void Function<T, U>(
            Map<T, U> Function(), void Function(T), void Function(U))
        f) {}
testUnnecessaryDueToExplicitParameterType(List<int> list) {}
testUnnecessaryDueToExplicitParameterTypeNamed(
    T Function<T>(T, T Function({required T x, required int y})) f) {}
testUnnecessaryDueToNoDependency(T Function<T>(T Function(), T) f) {}
