28 votes

Qui a inventé le passage de procuration et quand?

Il semble que, jusqu'à ces dernières années, la manière habituelle de passer d'un type supplémentaire d'une fonction était de faire quelque chose comme

f (undefined :: T)

Kiselyov et Shan même utilisé cette approche dans son article classique sur la classe de base de réflexion qui a inspiré l' reflection package. Ils ont excusé évident de la laideur en notant que le faux la valeur n'est jamais inspecté. Et seulement un peu moins laid incarnation apparaît en Data.Bits.finiteBitSize, qui prend une valeur qu'elle ignore pour obtenir son type.

Puis quelqu'un l'a deviné le proxy de l'idiome, et tout a changé. Maintenant, on voit toujours la plus satisfaisante

f (Proxy :: Proxy T)

(en standard code—GHC type d'application est une autre histoire).

Qui a pensé à elle? Ce premier apparaissent dans le code quelque part, ou un papier?

20voto

Hao Lian Points 1518

Un fantastique question. TypeLevelReasoning, l'un des premiers GHC proposition à partir d'avril 2013, les références de l' libraries fil "Proxy nouveaux Typable, et au niveau du type de l'égalité" (affiche originale de Richard Eisenberg, la force motrice derrière la plupart des récentes dépendante Haskell travail). Ce thread fait référence à un autre libraries fil "Proxy et de la nouvelle-typable" (affiche originale Shachaf Ben-Kiki), qui a été lancée en réponse à un patch de l' new-typeable de la branche. Il est difficile de trouver un enregistrement de vieux noms de branche et qui commet ils ont pointé, mais s'engager 3d53407 par José Pedro Magalhães semble être écrasé version de cette branche. En effet, il semble être le premier à valider l'atterrissage dans GHC d'introduire un data Proxy t = Proxy type. Eisenberg par la suite ce type d' Data.Proxy de commettre 01aa22b en février 2013. La conception finale de l' Proxy semble être collective, synthèse des idées de beaucoup de gens. Cependant, on peut trouver les références scientifiques à l' Proxy de Magalhães de travail, tels que sa présentation "Le bon Type de Programmation Générique" (octobre 2012) et son blog "bientôt dans GHC TÊTE: poly-kinded Typable" (novembre 2012). On peut probablement attribuer l'inclusion d' Proxy sur la base pour lui.

Cependant, l'idée d'un Proxy type semble beaucoup plus vieux:

C'est ici que mes recherches Google à son tour sec. Je n'arrive pas à trouver un antécédent de que 2005 de papier.

Coda: Shachaf de proposition dans ce thread, universellement quantifier le type de proxy en utilisant forall proxy a. proxy a (dont la base bibliothèques utilisent encore à ce jour) au lieu de forall a. Proxy a est lui-même intéressant, car l'un et l'autre des courriels dans le thread de suggérer qu'il y a à un point pourrait avoir été plusieurs instances d' Proxy flottant autour de l'Haskell écosystème. Comme mentionné dans les commentaires, Kmett marqué bibliothèque avait-il de retour en juin 2010.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: