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?