Кто изобрел передачу прокси и когда?
Кажется, что до последних лет обычным способом передачи дополнительного типа в функцию было сделать что-то вроде
f (undefined :: T)
Киселев и Шан даже использовали этот подход в своей классической статье о классовой рефлексии, которая вдохновлялаreflection
пакет. Они оправдывали очевидное безобразие, отмечая, что фиктивная ценность никогда не проверяется. И только немного менее уродливое воплощение появляется вData.Bits.finiteBitSize
, который принимает значение, которое игнорирует, чтобы получить его тип.
затемкто то разобрался с прокси идиомой, и все изменилось. Теперь мы всегда видим гораздо более удовлетворительное
f (Proxy :: Proxy T)
(в стандартном коде - приложение типа GHC - другая история).
Кто понял это? Это сначала появилось где-то в коде или в бумаге?