Rename datatypes in custom types variance switching test for readability

This commit is contained in:
Gaith Hallak 2022-05-25 17:28:30 +04:00
parent 025e0f7b8f
commit ef3b0dece9
2 changed files with 141 additions and 141 deletions

View File

@ -881,114 +881,114 @@ failing_contracts() ->
"when checking the type of the expression `f6() : option(Animal)` against the expected type `option(Cat)`">> "when checking the type of the expression `f6() : option(Animal)` against the expected type `option(Cat)`">>
]) ])
, ?TYPE_ERROR(polymorphism_variance_switching_custom_types, , ?TYPE_ERROR(polymorphism_variance_switching_custom_types,
[<<?Pos(56,32) [<<?Pos(56,39)
"Cannot unify `Cat` and `Animal` in a contravariant context\n" "Cannot unify `Cat` and `Animal` in a contravariant context\n"
"when checking the type of the expression `TA(f_c_to_u) : ta(Cat)` against the expected type `ta(Animal)`">>, "when checking the type of the expression `DT_CONTRA(f_c_to_u) : dt_contra(Cat)` against the expected type `dt_contra(Animal)`">>,
<<?Pos(62,32) <<?Pos(62,35)
"Cannot unify `Animal` and `Cat` in a covariant context\n" "Cannot unify `Animal` and `Cat` in a covariant context\n"
"when checking the type of the expression `TB(f_u_to_a) : tb(Animal)` against the expected type `tb(Cat)`">>, "when checking the type of the expression `DT_CO(f_u_to_a) : dt_co(Animal)` against the expected type `dt_co(Cat)`">>,
<<?Pos(66,32) <<?Pos(66,36)
"Cannot unify `Animal` and `Cat` in a invariant context\n" "Cannot unify `Animal` and `Cat` in a invariant context\n"
"when checking the application of\n" "when checking the application of\n"
" `TC : ((Animal) => Animal) => tc(Animal)`\n" " `DT_INV : ((Animal) => Animal) => dt_inv(Animal)`\n"
"to arguments\n" "to arguments\n"
" `f_a_to_c : (Animal) => Cat`">>, " `f_a_to_c : (Animal) => Cat`">>,
<<?Pos(67,32) <<?Pos(67,36)
"Cannot unify `Cat` and `Animal` in a invariant context\n" "Cannot unify `Cat` and `Animal` in a invariant context\n"
"when checking the application of\n" "when checking the application of\n"
" `TC : ((Cat) => Cat) => tc(Cat)`\n" " `DT_INV : ((Cat) => Cat) => dt_inv(Cat)`\n"
"to arguments\n" "to arguments\n"
" `f_c_to_a : (Cat) => Animal`">>, " `f_c_to_a : (Cat) => Animal`">>,
<<?Pos(68,32) <<?Pos(68,36)
"Cannot unify `Cat` and `Animal` in a invariant context\n" "Cannot unify `Cat` and `Animal` in a invariant context\n"
"when checking the type of the expression `TC(f_c_to_c) : tc(Cat)` against the expected type `tc(Animal)`">>, "when checking the type of the expression `DT_INV(f_c_to_c) : dt_inv(Cat)` against the expected type `dt_inv(Animal)`">>,
<<?Pos(69,32) <<?Pos(69,36)
"Cannot unify `Animal` and `Cat` in a invariant context\n" "Cannot unify `Animal` and `Cat` in a invariant context\n"
"when checking the type of the expression `TC(f_a_to_a) : tc(Animal)` against the expected type `tc(Cat)`">>, "when checking the type of the expression `DT_INV(f_a_to_a) : dt_inv(Animal)` against the expected type `dt_inv(Cat)`">>,
<<?Pos(70,32) <<?Pos(70,36)
"Cannot unify `Animal` and `Cat` in a invariant context\n" "Cannot unify `Animal` and `Cat` in a invariant context\n"
"when checking the application of\n" "when checking the application of\n"
" `TC : ((Animal) => Animal) => tc(Animal)`\n" " `DT_INV : ((Animal) => Animal) => dt_inv(Animal)`\n"
"to arguments\n" "to arguments\n"
" `f_a_to_c : (Animal) => Cat`">>, " `f_a_to_c : (Animal) => Cat`">>,
<<?Pos(71,32) <<?Pos(71,36)
"Cannot unify `Cat` and `Animal` in a invariant context\n" "Cannot unify `Cat` and `Animal` in a invariant context\n"
"when checking the application of\n" "when checking the application of\n"
" `TC : ((Cat) => Cat) => tc(Cat)`\n" " `DT_INV : ((Cat) => Cat) => dt_inv(Cat)`\n"
"to arguments\n" "to arguments\n"
" `f_c_to_a : (Cat) => Animal`">>, " `f_c_to_a : (Cat) => Animal`">>,
<<?Pos(78,32) <<?Pos(78,40)
"Cannot unify `Cat` and `Animal` in a invariant context\n" "Cannot unify `Cat` and `Animal` in a invariant context\n"
"when checking the type of the expression `TE1(f_c_to_u) : te(Cat)` against the expected type `te(Animal)`">>, "when checking the type of the expression `DT_INV_SEP_A(f_c_to_u) : dt_inv_sep(Cat)` against the expected type `dt_inv_sep(Animal)`">>,
<<?Pos(80,32) <<?Pos(80,40)
"Cannot unify `Cat` and `Animal` in a invariant context\n" "Cannot unify `Cat` and `Animal` in a invariant context\n"
"when checking the type of the expression `TE2(f_u_to_c) : te(Cat)` against the expected type `te(Animal)`">>, "when checking the type of the expression `DT_INV_SEP_B(f_u_to_c) : dt_inv_sep(Cat)` against the expected type `dt_inv_sep(Animal)`">>,
<<?Pos(81,32) <<?Pos(81,40)
"Cannot unify `Animal` and `Cat` in a invariant context\n" "Cannot unify `Animal` and `Cat` in a invariant context\n"
"when checking the type of the expression `TE1(f_a_to_u) : te(Animal)` against the expected type `te(Cat)`">>, "when checking the type of the expression `DT_INV_SEP_A(f_a_to_u) : dt_inv_sep(Animal)` against the expected type `dt_inv_sep(Cat)`">>,
<<?Pos(83,32) <<?Pos(83,40)
"Cannot unify `Animal` and `Cat` in a invariant context\n" "Cannot unify `Animal` and `Cat` in a invariant context\n"
"when checking the type of the expression `TE2(f_u_to_a) : te(Animal)` against the expected type `te(Cat)`">>, "when checking the type of the expression `DT_INV_SEP_B(f_u_to_a) : dt_inv_sep(Animal)` against the expected type `dt_inv_sep(Cat)`">>,
<<?Pos(88,32) <<?Pos(88,42)
"Cannot unify `Animal` and `Cat` in a covariant context\n" "Cannot unify `Animal` and `Cat` in a covariant context\n"
"when checking the type of the expression `TF(f_ta_a_to_u) : tf(Animal)` against the expected type `tf(Cat)`">>, "when checking the type of the expression `DT_CO_NEST_A(f_ta_a_to_u) : dt_co_nest_a(Animal)` against the expected type `dt_co_nest_a(Cat)`">>,
<<?Pos(92,32) <<?Pos(92,46)
"Cannot unify `Cat` and `Animal` in a contravariant context\n" "Cannot unify `Cat` and `Animal` in a contravariant context\n"
"when checking the type of the expression `TG(f_tb_c_to_u) : tg(Cat)` against the expected type `tg(Animal)`">>, "when checking the type of the expression `DT_CONTRA_NEST_A(f_tb_c_to_u) : dt_contra_nest_a(Cat)` against the expected type `dt_contra_nest_a(Animal)`">>,
<<?Pos(97,32) <<?Pos(97,46)
"Cannot unify `Cat` and `Animal` in a contravariant context\n" "Cannot unify `Cat` and `Animal` in a contravariant context\n"
"when checking the type of the expression `TH(f_u_to_ta_c) : th(Cat)` against the expected type `th(Animal)`">>, "when checking the type of the expression `DT_CONTRA_NEST_B(f_u_to_ta_c) : dt_contra_nest_b(Cat)` against the expected type `dt_contra_nest_b(Animal)`">>,
<<?Pos(103,32) <<?Pos(103,42)
"Cannot unify `Animal` and `Cat` in a covariant context\n" "Cannot unify `Animal` and `Cat` in a covariant context\n"
"when checking the type of the expression `TI(f_u_to_tb_a) : ti(Animal)` against the expected type `ti(Cat)`">>, "when checking the type of the expression `DT_CO_NEST_B(f_u_to_tb_a) : dt_co_nest_b(Animal)` against the expected type `dt_co_nest_b(Cat)`">>,
<<?Pos(107,32) <<?Pos(107,41)
"Cannot unify `Animal` and `Cat` in a invariant context\n" "Cannot unify `Animal` and `Cat` in a invariant context\n"
"when checking the application of\n" "when checking the application of\n"
" `TJ : ((Animal) => (unit) => Animal) => tj(Animal)`\n" " `DT_CO_TWICE : ((Animal) => (unit) => Animal) => dt_co_twice(Animal)`\n"
"to arguments\n" "to arguments\n"
" `f_a_to_u_to_c : (Animal) => (unit) => Cat`">>, " `f_a_to_u_to_c : (Animal) => (unit) => Cat`">>,
<<?Pos(108,32) <<?Pos(108,41)
"Cannot unify `Cat` and `Animal` in a invariant context\n" "Cannot unify `Cat` and `Animal` in a invariant context\n"
"when checking the application of\n" "when checking the application of\n"
" `TJ : ((Cat) => (unit) => Cat) => tj(Cat)`\n" " `DT_CO_TWICE : ((Cat) => (unit) => Cat) => dt_co_twice(Cat)`\n"
"to arguments\n" "to arguments\n"
" `f_c_to_u_to_a : (Cat) => (unit) => Animal`">>, " `f_c_to_u_to_a : (Cat) => (unit) => Animal`">>,
<<?Pos(110,32) <<?Pos(110,41)
"Cannot unify `Animal` and `Cat` in a covariant context\n" "Cannot unify `Animal` and `Cat` in a covariant context\n"
"when checking the type of the expression `TJ(f_a_to_u_to_a) : tj(Animal)` against the expected type `tj(Cat)`">>, "when checking the type of the expression `DT_CO_TWICE(f_a_to_u_to_a) : dt_co_twice(Animal)` against the expected type `dt_co_twice(Cat)`">>,
<<?Pos(111,32) <<?Pos(111,41)
"Cannot unify `Animal` and `Cat` in a invariant context\n" "Cannot unify `Animal` and `Cat` in a invariant context\n"
"when checking the application of\n" "when checking the application of\n"
" `TJ : ((Animal) => (unit) => Animal) => tj(Animal)`\n" " `DT_CO_TWICE : ((Animal) => (unit) => Animal) => dt_co_twice(Animal)`\n"
"to arguments\n" "to arguments\n"
" `f_a_to_u_to_c : (Animal) => (unit) => Cat`">>, " `f_a_to_u_to_c : (Animal) => (unit) => Cat`">>,
<<?Pos(112,32) <<?Pos(112,41)
"Cannot unify `Cat` and `Animal` in a invariant context\n" "Cannot unify `Cat` and `Animal` in a invariant context\n"
"when checking the application of\n" "when checking the application of\n"
" `TJ : ((Cat) => (unit) => Cat) => tj(Cat)`\n" " `DT_CO_TWICE : ((Cat) => (unit) => Cat) => dt_co_twice(Cat)`\n"
"to arguments\n" "to arguments\n"
" `f_c_to_u_to_a : (Cat) => (unit) => Animal`">>, " `f_c_to_u_to_a : (Cat) => (unit) => Animal`">>,
<<?Pos(116,41) <<?Pos(116,55)
"Cannot unify `Cat` and `Animal` in a contravariant context\n" "Cannot unify `Cat` and `Animal` in a contravariant context\n"
"when checking the type of the expression `TK(f_a_to_c_to_u) : tk(Animal, Cat)` against the expected type `tk(Animal, Animal)`">>, "when checking the type of the expression `DT_A_CO_B_CONTRA(f_a_to_c_to_u) : dt_a_co_b_contra(Animal, Cat)` against the expected type `dt_a_co_b_contra(Animal, Animal)`">>,
<<?Pos(118,41) <<?Pos(118,55)
"Cannot unify `Cat` and `Animal` in a contravariant context\n" "Cannot unify `Cat` and `Animal` in a contravariant context\n"
"when checking the type of the expression `TK(f_c_to_c_to_u) : tk(Cat, Cat)` against the expected type `tk(Animal, Animal)`">>, "when checking the type of the expression `DT_A_CO_B_CONTRA(f_c_to_c_to_u) : dt_a_co_b_contra(Cat, Cat)` against the expected type `dt_a_co_b_contra(Animal, Animal)`">>,
<<?Pos(123,41) <<?Pos(123,55)
"Cannot unify `Animal` and `Cat` in a covariant context\n" "Cannot unify `Animal` and `Cat` in a covariant context\n"
"when checking the type of the expression `TK(f_a_to_a_to_u) : tk(Animal, Animal)` against the expected type `tk(Cat, Animal)`">>, "when checking the type of the expression `DT_A_CO_B_CONTRA(f_a_to_a_to_u) : dt_a_co_b_contra(Animal, Animal)` against the expected type `dt_a_co_b_contra(Cat, Animal)`">>,
<<?Pos(124,41) <<?Pos(124,55)
"Cannot unify `Animal` and `Cat` in a covariant context\n" "Cannot unify `Animal` and `Cat` in a covariant context\n"
"when checking the type of the expression `TK(f_a_to_c_to_u) : tk(Animal, Cat)` against the expected type `tk(Cat, Animal)`">>, "when checking the type of the expression `DT_A_CO_B_CONTRA(f_a_to_c_to_u) : dt_a_co_b_contra(Animal, Cat)` against the expected type `dt_a_co_b_contra(Cat, Animal)`">>,
<<?Pos(126,41) <<?Pos(126,55)
"Cannot unify `Cat` and `Animal` in a contravariant context\n" "Cannot unify `Cat` and `Animal` in a contravariant context\n"
"when checking the type of the expression `TK(f_c_to_c_to_u) : tk(Cat, Cat)` against the expected type `tk(Cat, Animal)`">>, "when checking the type of the expression `DT_A_CO_B_CONTRA(f_c_to_c_to_u) : dt_a_co_b_contra(Cat, Cat)` against the expected type `dt_a_co_b_contra(Cat, Animal)`">>,
<<?Pos(127,41) <<?Pos(127,55)
"Cannot unify `Animal` and `Cat` in a covariant context\n" "Cannot unify `Animal` and `Cat` in a covariant context\n"
"when checking the type of the expression `TK(f_a_to_a_to_u) : tk(Animal, Animal)` against the expected type `tk(Cat, Cat)`">>, "when checking the type of the expression `DT_A_CO_B_CONTRA(f_a_to_a_to_u) : dt_a_co_b_contra(Animal, Animal)` against the expected type `dt_a_co_b_contra(Cat, Cat)`">>,
<<?Pos(128,41) <<?Pos(128,55)
"Cannot unify `Animal` and `Cat` in a covariant context\n" "Cannot unify `Animal` and `Cat` in a covariant context\n"
"when checking the type of the expression `TK(f_a_to_c_to_u) : tk(Animal, Cat)` against the expected type `tk(Cat, Cat)`">> "when checking the type of the expression `DT_A_CO_B_CONTRA(f_a_to_c_to_u) : dt_a_co_b_contra(Animal, Cat)` against the expected type `dt_a_co_b_contra(Cat, Cat)`">>
]) ])
, ?TYPE_ERROR(polymorphism_variance_switching_records, , ?TYPE_ERROR(polymorphism_variance_switching_records,
[<<?Pos(27,13) [<<?Pos(27,13)

View File

@ -5,17 +5,17 @@ contract Cat : Animal =
entrypoint sound() = "meow" entrypoint sound() = "meow"
main contract Main = main contract Main =
datatype ta('a) = TA('a => unit) datatype dt_contra('a) = DT_CONTRA('a => unit)
datatype tb('a) = TB(unit => 'a) datatype dt_co('a) = DT_CO(unit => 'a)
datatype tc('a) = TC('a => 'a) datatype dt_inv('a) = DT_INV('a => 'a)
datatype td('a) = TD(unit => unit) datatype dt_biv('a) = DT_BIV(unit => unit)
datatype te('a) = TE1('a => unit) | TE2(unit => 'a) datatype dt_inv_sep('a) = DT_INV_SEP_A('a => unit) | DT_INV_SEP_B(unit => 'a)
datatype tf('a) = TF(ta('a) => unit) datatype dt_co_nest_a('a) = DT_CO_NEST_A(dt_contra('a) => unit)
datatype tg('a) = TG(tb('a) => unit) datatype dt_contra_nest_a('a) = DT_CONTRA_NEST_A(dt_co('a) => unit)
datatype th('a) = TH(unit => ta('a)) datatype dt_contra_nest_b('a) = DT_CONTRA_NEST_B(unit => dt_contra('a))
datatype ti('a) = TI(unit => tb('a)) datatype dt_co_nest_b('a) = DT_CO_NEST_B(unit => dt_co('a))
datatype tj('a) = TJ('a => unit => 'a) datatype dt_co_twice('a) = DT_CO_TWICE('a => unit => 'a)
datatype tk('a, 'b) = TK('a => 'b => unit) datatype dt_a_co_b_contra('a, 'b) = DT_A_CO_B_CONTRA('a => 'b => unit)
function f_a_to_a_to_u(_ : Animal) : (Animal => unit) = f_a_to_u function f_a_to_a_to_u(_ : Animal) : (Animal => unit) = f_a_to_u
function f_a_to_c_to_u(_ : Animal) : (Cat => unit) = f_c_to_u function f_a_to_c_to_u(_ : Animal) : (Cat => unit) = f_c_to_u
@ -26,12 +26,12 @@ main contract Main =
function f_a_to_u(_ : Animal) : unit = () function f_a_to_u(_ : Animal) : unit = ()
function f_c_to_u(_ : Cat) : unit = () function f_c_to_u(_ : Cat) : unit = ()
function f_ta_a_to_u(_ : ta(Animal)) : unit = () function f_ta_a_to_u(_ : dt_contra(Animal)) : unit = ()
function f_ta_c_to_u(_ : ta(Cat)) : unit = () function f_ta_c_to_u(_ : dt_contra(Cat)) : unit = ()
function f_tb_a_to_u(_ : tb(Animal)) : unit = () function f_tb_a_to_u(_ : dt_co(Animal)) : unit = ()
function f_tb_c_to_u(_ : tb(Cat)) : unit = () function f_tb_c_to_u(_ : dt_co(Cat)) : unit = ()
function f_u_to_ta_a(_ : unit) : ta(Animal) = TA(f_a_to_u) function f_u_to_ta_a(_ : unit) : dt_contra(Animal) = DT_CONTRA(f_a_to_u)
function f_u_to_ta_c(_ : unit) : ta(Cat) = TA(f_c_to_u) function f_u_to_ta_c(_ : unit) : dt_contra(Cat) = DT_CONTRA(f_c_to_u)
stateful function f_c() : Cat = Chain.create() stateful function f_c() : Cat = Chain.create()
stateful function f_a() : Animal = f_c() stateful function f_a() : Animal = f_c()
@ -48,85 +48,85 @@ main contract Main =
stateful function f_c_to_u_to_a(_ : Cat) : (unit => Animal) = f_u_to_a stateful function f_c_to_u_to_a(_ : Cat) : (unit => Animal) = f_u_to_a
stateful function f_c_to_u_to_c(_ : Cat) : (unit => Cat) = f_u_to_c stateful function f_c_to_u_to_c(_ : Cat) : (unit => Cat) = f_u_to_c
stateful function f_u_to_tb_a(_ : unit) : tb(Animal) = TB(f_u_to_a) stateful function f_u_to_tb_a(_ : unit) : dt_co(Animal) = DT_CO(f_u_to_a)
stateful function f_u_to_tb_c(_ : unit) : tb(Cat) = TB(f_u_to_c) stateful function f_u_to_tb_c(_ : unit) : dt_co(Cat) = DT_CO(f_u_to_c)
stateful entrypoint init() = stateful entrypoint init() =
let va1 : ta(Animal) = TA(f_a_to_u) // success let va1 : dt_contra(Animal) = DT_CONTRA(f_a_to_u) // success
let va2 : ta(Animal) = TA(f_c_to_u) // fail let va2 : dt_contra(Animal) = DT_CONTRA(f_c_to_u) // fail
let va3 : ta(Cat) = TA(f_a_to_u) // success let va3 : dt_contra(Cat) = DT_CONTRA(f_a_to_u) // success
let va4 : ta(Cat) = TA(f_c_to_u) // success let va4 : dt_contra(Cat) = DT_CONTRA(f_c_to_u) // success
let vb1 : tb(Animal) = TB(f_u_to_a) // success let vb1 : dt_co(Animal) = DT_CO(f_u_to_a) // success
let vb2 : tb(Animal) = TB(f_u_to_c) // success let vb2 : dt_co(Animal) = DT_CO(f_u_to_c) // success
let vb3 : tb(Cat) = TB(f_u_to_a) // fail let vb3 : dt_co(Cat) = DT_CO(f_u_to_a) // fail
let vb4 : tb(Cat) = TB(f_u_to_c) // success let vb4 : dt_co(Cat) = DT_CO(f_u_to_c) // success
let vc1 : tc(Animal) = TC(f_a_to_a) // success let vc1 : dt_inv(Animal) = DT_INV(f_a_to_a) // success
let vc2 : tc(Animal) = TC(f_a_to_c) // fail let vc2 : dt_inv(Animal) = DT_INV(f_a_to_c) // fail
let vc3 : tc(Animal) = TC(f_c_to_a) // fail let vc3 : dt_inv(Animal) = DT_INV(f_c_to_a) // fail
let vc4 : tc(Animal) = TC(f_c_to_c) // fail let vc4 : dt_inv(Animal) = DT_INV(f_c_to_c) // fail
let vc5 : tc(Cat) = TC(f_a_to_a) // fail let vc5 : dt_inv(Cat) = DT_INV(f_a_to_a) // fail
let vc6 : tc(Cat) = TC(f_a_to_c) // fail let vc6 : dt_inv(Cat) = DT_INV(f_a_to_c) // fail
let vc7 : tc(Cat) = TC(f_c_to_a) // fail let vc7 : dt_inv(Cat) = DT_INV(f_c_to_a) // fail
let vc8 : tc(Cat) = TC(f_c_to_c) // success let vc8 : dt_inv(Cat) = DT_INV(f_c_to_c) // success
let vd1 : td(Animal) = TD(f_u_to_u) // success let vd1 : dt_biv(Animal) = DT_BIV(f_u_to_u) // success
let vd2 : td(Cat) = TD(f_u_to_u) // success let vd2 : dt_biv(Cat) = DT_BIV(f_u_to_u) // success
let ve1 : te(Animal) = TE1(f_a_to_u) // success let ve1 : dt_inv_sep(Animal) = DT_INV_SEP_A(f_a_to_u) // success
let ve2 : te(Animal) = TE1(f_c_to_u) // fail let ve2 : dt_inv_sep(Animal) = DT_INV_SEP_A(f_c_to_u) // fail
let ve3 : te(Animal) = TE2(f_u_to_a) // success let ve3 : dt_inv_sep(Animal) = DT_INV_SEP_B(f_u_to_a) // success
let ve4 : te(Animal) = TE2(f_u_to_c) // fail let ve4 : dt_inv_sep(Animal) = DT_INV_SEP_B(f_u_to_c) // fail
let ve5 : te(Cat) = TE1(f_a_to_u) // fail let ve5 : dt_inv_sep(Cat) = DT_INV_SEP_A(f_a_to_u) // fail
let ve6 : te(Cat) = TE1(f_c_to_u) // success let ve6 : dt_inv_sep(Cat) = DT_INV_SEP_A(f_c_to_u) // success
let ve7 : te(Cat) = TE2(f_u_to_a) // fail let ve7 : dt_inv_sep(Cat) = DT_INV_SEP_B(f_u_to_a) // fail
let ve8 : te(Cat) = TE2(f_u_to_c) // success let ve8 : dt_inv_sep(Cat) = DT_INV_SEP_B(f_u_to_c) // success
let vf1 : tf(Animal) = TF(f_ta_a_to_u) // success let vf1 : dt_co_nest_a(Animal) = DT_CO_NEST_A(f_ta_a_to_u) // success
let vf2 : tf(Animal) = TF(f_ta_c_to_u) // success let vf2 : dt_co_nest_a(Animal) = DT_CO_NEST_A(f_ta_c_to_u) // success
let vf3 : tf(Cat) = TF(f_ta_a_to_u) // fail let vf3 : dt_co_nest_a(Cat) = DT_CO_NEST_A(f_ta_a_to_u) // fail
let vf4 : tf(Cat) = TF(f_ta_c_to_u) // success let vf4 : dt_co_nest_a(Cat) = DT_CO_NEST_A(f_ta_c_to_u) // success
let vg1 : tg(Animal) = TG(f_tb_a_to_u) // success let vg1 : dt_contra_nest_a(Animal) = DT_CONTRA_NEST_A(f_tb_a_to_u) // success
let vg2 : tg(Animal) = TG(f_tb_c_to_u) // fail let vg2 : dt_contra_nest_a(Animal) = DT_CONTRA_NEST_A(f_tb_c_to_u) // fail
let vg3 : tg(Cat) = TG(f_tb_a_to_u) // success let vg3 : dt_contra_nest_a(Cat) = DT_CONTRA_NEST_A(f_tb_a_to_u) // success
let vg4 : tg(Cat) = TG(f_tb_c_to_u) // success let vg4 : dt_contra_nest_a(Cat) = DT_CONTRA_NEST_A(f_tb_c_to_u) // success
let vh1 : th(Animal) = TH(f_u_to_ta_a) // success let vh1 : dt_contra_nest_b(Animal) = DT_CONTRA_NEST_B(f_u_to_ta_a) // success
let vh2 : th(Animal) = TH(f_u_to_ta_c) // fail let vh2 : dt_contra_nest_b(Animal) = DT_CONTRA_NEST_B(f_u_to_ta_c) // fail
let vh3 : th(Cat) = TH(f_u_to_ta_a) // success let vh3 : dt_contra_nest_b(Cat) = DT_CONTRA_NEST_B(f_u_to_ta_a) // success
let vh4 : th(Cat) = TH(f_u_to_ta_c) // success let vh4 : dt_contra_nest_b(Cat) = DT_CONTRA_NEST_B(f_u_to_ta_c) // success
let vi1 : ti(Animal) = TI(f_u_to_tb_a) // success let vi1 : dt_co_nest_b(Animal) = DT_CO_NEST_B(f_u_to_tb_a) // success
let vi2 : ti(Animal) = TI(f_u_to_tb_c) // success let vi2 : dt_co_nest_b(Animal) = DT_CO_NEST_B(f_u_to_tb_c) // success
let vi3 : ti(Cat) = TI(f_u_to_tb_a) // fail let vi3 : dt_co_nest_b(Cat) = DT_CO_NEST_B(f_u_to_tb_a) // fail
let vi4 : ti(Cat) = TI(f_u_to_tb_c) // success let vi4 : dt_co_nest_b(Cat) = DT_CO_NEST_B(f_u_to_tb_c) // success
let vj1 : tj(Animal) = TJ(f_a_to_u_to_a) // success let vj1 : dt_co_twice(Animal) = DT_CO_TWICE(f_a_to_u_to_a) // success
let vj2 : tj(Animal) = TJ(f_a_to_u_to_c) // fail let vj2 : dt_co_twice(Animal) = DT_CO_TWICE(f_a_to_u_to_c) // fail
let vj3 : tj(Animal) = TJ(f_c_to_u_to_a) // fail let vj3 : dt_co_twice(Animal) = DT_CO_TWICE(f_c_to_u_to_a) // fail
let vj4 : tj(Animal) = TJ(f_c_to_u_to_c) // success let vj4 : dt_co_twice(Animal) = DT_CO_TWICE(f_c_to_u_to_c) // success
let vj5 : tj(Cat) = TJ(f_a_to_u_to_a) // fail let vj5 : dt_co_twice(Cat) = DT_CO_TWICE(f_a_to_u_to_a) // fail
let vj6 : tj(Cat) = TJ(f_a_to_u_to_c) // fail let vj6 : dt_co_twice(Cat) = DT_CO_TWICE(f_a_to_u_to_c) // fail
let vj7 : tj(Cat) = TJ(f_c_to_u_to_a) // fail let vj7 : dt_co_twice(Cat) = DT_CO_TWICE(f_c_to_u_to_a) // fail
let vj8 : tj(Cat) = TJ(f_c_to_u_to_c) // success let vj8 : dt_co_twice(Cat) = DT_CO_TWICE(f_c_to_u_to_c) // success
let vk01 : tk(Animal, Animal) = TK(f_a_to_a_to_u) // success let vk01 : dt_a_co_b_contra(Animal, Animal) = DT_A_CO_B_CONTRA(f_a_to_a_to_u) // success
let vk02 : tk(Animal, Animal) = TK(f_a_to_c_to_u) // fail let vk02 : dt_a_co_b_contra(Animal, Animal) = DT_A_CO_B_CONTRA(f_a_to_c_to_u) // fail
let vk03 : tk(Animal, Animal) = TK(f_c_to_a_to_u) // success let vk03 : dt_a_co_b_contra(Animal, Animal) = DT_A_CO_B_CONTRA(f_c_to_a_to_u) // success
let vk04 : tk(Animal, Animal) = TK(f_c_to_c_to_u) // fail let vk04 : dt_a_co_b_contra(Animal, Animal) = DT_A_CO_B_CONTRA(f_c_to_c_to_u) // fail
let vk05 : tk(Animal, Cat) = TK(f_a_to_a_to_u) // success let vk05 : dt_a_co_b_contra(Animal, Cat) = DT_A_CO_B_CONTRA(f_a_to_a_to_u) // success
let vk06 : tk(Animal, Cat) = TK(f_a_to_c_to_u) // success let vk06 : dt_a_co_b_contra(Animal, Cat) = DT_A_CO_B_CONTRA(f_a_to_c_to_u) // success
let vk07 : tk(Animal, Cat) = TK(f_c_to_a_to_u) // success let vk07 : dt_a_co_b_contra(Animal, Cat) = DT_A_CO_B_CONTRA(f_c_to_a_to_u) // success
let vk08 : tk(Animal, Cat) = TK(f_c_to_c_to_u) // success let vk08 : dt_a_co_b_contra(Animal, Cat) = DT_A_CO_B_CONTRA(f_c_to_c_to_u) // success
let vk09 : tk(Cat, Animal) = TK(f_a_to_a_to_u) // fail let vk09 : dt_a_co_b_contra(Cat, Animal) = DT_A_CO_B_CONTRA(f_a_to_a_to_u) // fail
let vk10 : tk(Cat, Animal) = TK(f_a_to_c_to_u) // fail let vk10 : dt_a_co_b_contra(Cat, Animal) = DT_A_CO_B_CONTRA(f_a_to_c_to_u) // fail
let vk11 : tk(Cat, Animal) = TK(f_c_to_a_to_u) // success let vk11 : dt_a_co_b_contra(Cat, Animal) = DT_A_CO_B_CONTRA(f_c_to_a_to_u) // success
let vk12 : tk(Cat, Animal) = TK(f_c_to_c_to_u) // fail let vk12 : dt_a_co_b_contra(Cat, Animal) = DT_A_CO_B_CONTRA(f_c_to_c_to_u) // fail
let vk13 : tk(Cat, Cat) = TK(f_a_to_a_to_u) // fail let vk13 : dt_a_co_b_contra(Cat, Cat) = DT_A_CO_B_CONTRA(f_a_to_a_to_u) // fail
let vk14 : tk(Cat, Cat) = TK(f_a_to_c_to_u) // fail let vk14 : dt_a_co_b_contra(Cat, Cat) = DT_A_CO_B_CONTRA(f_a_to_c_to_u) // fail
let vk15 : tk(Cat, Cat) = TK(f_c_to_a_to_u) // success let vk15 : dt_a_co_b_contra(Cat, Cat) = DT_A_CO_B_CONTRA(f_c_to_a_to_u) // success
let vk16 : tk(Cat, Cat) = TK(f_c_to_c_to_u) // success let vk16 : dt_a_co_b_contra(Cat, Cat) = DT_A_CO_B_CONTRA(f_c_to_c_to_u) // success
() ()