[Haskell-cafe] Writing functions over GADTs