Я все еще нахожусь в процессе выяснения точных правил / значений печатания, вовлеченных здесь.
Кажется, легко / легче, если типы в примерах "достаточно просты", чтобы "хорошо вписаться", как показано выше, но это становится более интересным / трудным (по крайней мере для меня) при сравнении вещей с типизацией, которую дает tiark rompf:
|- e: A@cpsParam[B,C]; {[|r|]}: U
-----------------------------------------------------
[|val x: A = e; r|] = [|e|].map( (x: A) => {[|r|]} )
, поэтому результат [|e|].map( (x: A) => {[|r|]} )
будет иметь тип Shift[U,B,C]
в соответствии с определением карты, приведенным в статье Тиарка.
Здесь U не обязательно совпадает с B.
Пока я не понимаю, почему U может отличаться от B без чего-то вроде
U <: B
приведено в определении карты в статье Тиарка.
Что я упускаю из виду, что не могу понять здесь?
Какие-нибудь советы / идеи?