Quem inventou a passagem por procuração e quando?

Parece que até anos recentes, a maneira usual de passar um tipo extra para uma função era fazer algo como

f (undefined :: T)

Kiselyov e Shan até usaram essa abordagem em seu artigo clássico sobre reflexão baseada em classe que inspirou areflection pacote. Eles desculparam a feiúra óbvia observando que o valor falso nunca é inspecionado. E uma encarnação apenas um pouco menos feia aparece emData.Bits.finiteBitSize, que aceita um valor que ignora para obter seu tipo.

Entãoalguém descobri o idioma do proxy, e tudo mudou. Agora sempre vemos o muito mais satisfatório

f (Proxy :: Proxy T)

(no código padrão - o aplicativo do tipo GHC é outra história).

Quem descobriu isso? Isso apareceu pela primeira vez no código em algum lugar ou em um jornal?

questionAnswers(1)

yourAnswerToTheQuestion