В моем (возможно неправильном) понимании следующие два списка должны быть эквивалентными:
[1, "a"] :: [forall a. Show a => a]
data V = forall a. Show a => V a
[V 1, V "a"] :: [V]
Однако первый из них не принят, но второй работает отлично (с ExistentialQuantification
).
Если первый список не существует, каков будет тип в пробеле map V :: ??? -> [V]
? Какой тип механизма обеспечивает наличие оболочки?