Кто изобрел передачу прокси и когда?

Кажется, что до последних лет обычным способом передачи дополнительного типа в функцию было сделать что-то вроде

f (undefined :: T)

Киселев и Шан даже использовали этот подход в своей классической статье о классовой рефлексии, которая вдохновлялаreflection пакет. Они оправдывали очевидное безобразие, отмечая, что фиктивная ценность никогда не проверяется. И только немного менее уродливое воплощение появляется вData.Bits.finiteBitSize, который принимает значение, которое игнорирует, чтобы получить его тип.

затемкто то разобрался с прокси идиомой, и все изменилось. Теперь мы всегда видим гораздо более удовлетворительное

f (Proxy :: Proxy T)

(в стандартном коде - приложение типа GHC - другая история).

Кто понял это? Это сначала появилось где-то в коде или в бумаге?

Ответы на вопрос(1)

Ваш ответ на вопрос