[Haskell-cafe] Are GADTs expressive? Simple proof-carrying code in Haskell98