Если определить тип данных содержащий поле existential-типа, например:
data T = forall a. Show a => T a
То при попытке вытащить его:
g (T n) = n
получается такая ошибка. С GADTs - тоже самое.
При этом использовать это поле в вычислениях можно:
f (T n) = putStrLn (show n) >> return ()
Почему так получается - сконструировать можно, но разобрать нельзя?