Vi klassificerar programmeringsspråk enligt utvärderingsordning: varje språk fixar en utvärderingsorder som standard, vilket gör det transparent att programmera i den utvärderingsordningen, och besvärligt att programmera i den andra. I detta dokument utvecklas ett typsystem som är opartiskt när det gäller utvärderingsordningen. Utvärderingsordning är implicit i termer, och explicit i typer, med by- value och by- name versioner av typ bindväv. En form av skärningspunkt typ kvantifierar över utvärderingsorder, beskriver kod som är agnostic över (dvs. polymorphic i) utvärderingsordning. Genom att tillåta sådan generisk kod, program kan uttrycka by-värde och by-name versioner av en beräkning utan kod dubblering. Vi formulerar också ett typsystem som endast har by- value bindväv, plus en typ som generaliserar skillnaden mellan by- value och by- name bindväv: det är antingen en suspension (efter namn) eller en "no-op" (efter värde). Vi visar en enkel kodning av det opartiska typsystemet till det mer ekonomiska. Sedan definierar vi en utveckling från det ekonomiska språket till en call-by- value semantik, och bevisar att utvecklandet av ett välskrivet källkodsprogram, där utvärderingsordningen är implicit, producerar ett välskrivet målprogram där utvärderingsordningen är explicit. Vi bevisar också en simulering mellan utvärdering av målprogrammet och minskningar (antingen vid värde eller vid namn) i källprogrammet. Slutligen bevisar vi att skriva, utveckla och utvärdera är trogna de typanteckningar som ges i källprogrammet: om programmeraren bara skriver vid-värde typer, kan inga by-name minskningar ske på körtid.
För REF, där utvärderingsordningen är implicit i termer och explicit i typer, det förhindrar spontan generering av by-name typer; i vårt system, det förhindrar spontan generering av gradvisa summa typer.
Elaborating evaluation-order polymorphism
{'venue': 'ICFP 2015', 'journal': None, 'mag_field_of_study': ['Computer Science']}