// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

/// @assertion A generic type alias is a declaration [D] of one of the following
/// forms:
///   m typedef id<X1 extends B1, . . . , Xs extends Bs> = T;
///   m typedef S? id<X1 extends B1, . . . , Xs extends Bs>(
///     T1 p1, . . . , Tn pn, [Tn+1 pn+1, . . . , Tn+k pn+k]);
///   m typedef S? id<X1 extends B1, . . . , Xs extends Bs>(
///     T1 p1, . . . , Tn pn, {Tn+1 pn+1, . . . , Tn+k pn+k});
/// where [m] is derived from metadata, [T] is a type, and [S?] is a type or the
/// empty string. Let [S0] be [S?] if it is a type, otherwise let [S0] be
/// [dynamic]. The associated type of [D], call it [F], is, respectively:
///   T
///   S0 Function(T1, . . . , Tn, [Tn+1, . . . , Tn+k])
///   S0 Function(T1, . . . , Tn, {Tn+1 xn+1, . . . , Tn+k xn+k})
/// ...
/// Moreover, let [T1], . . . , [Tl] be types and let [U] be the parameterized
/// type id<T1, . . . , Tl> in a location where [id] denotes [D]. It is a
/// compile-time error if [l] != [s].
/// @description Checks that compile error is thrown if parametrized type number
/// is incorrect for [typedef] which defines function.
/// @author iarkh@unipro.ru


typedef AAlias<T> = T Function<T1 extends T>();
typedef BAlias<T1, T2> = void Function(T1, T2);
typedef CAlias<T1, T2, T3> = T1 Function<TT2 extends T2>(T3);

main() {
  AAlias                                a1;
  AAlias<int>                           a2;
  AAlias<dynamic, dynamic>              a3; //# 01: compile-time error
  AAlias<int, dynamic, String>          a4; //# 02: compile-time error
  AAlias<int, dynamic, String, dynamic> a5; //# 03: compile-time error

  BAlias                                b1;
  BAlias<int>                           b2; //# 04: compile-time error
  BAlias<dynamic, dynamic>              b3;
  BAlias<int, dynamic, String>          b4; //# 05: compile-time error
  BAlias<int, dynamic, String, dynamic> b5; //# 06: compile-time error

  CAlias                                c1;
  CAlias<int>                           c2; //# 07: compile-time error
  CAlias<dynamic, dynamic>              c3; //# 08: compile-time error
  CAlias<int, dynamic, String>          c4;
  CAlias<int, dynamic, String, dynamic> c5; //# 09: compile-time error
}
