Нет, это невозможно (кроме «тривиальных» реализаций, таких как , сделанных melpomene , которые полностью игнорируют аргумент).
Значение типа Proxy a
не несет большеинформация во время выполнения, чем ()
, то есть она вообще не несет никакой информации.Это верно независимо от того, что a
.
Ваш тип T
несет больше информации, чем просто ()
во время выполнения: он содержит словарь методов Show
для некоторого типа.Этот словарь не очень полезен, так как к моменту распаковки экзистенциала у вас нет никакого способа получить значение типа t
, чтобы использовать show
, но технически информация там есть.
Поскольку построение T
требует предоставления словаря классов типов, но словарь (и никакие средства для его получения) не существует внутри Proxy T
, и нет никакой статической информации о том, для какого типа должен быть словарь,невозможно получить словарь, необходимый для построения T
.Другими словами, построение значения типа Proxy T
не выбирает t
- нет типа «внутри» T
в Proxy T
- так как Proxy
несет только информацию уровня типа, ноt
внутри типа T
существует только на уровне значений.