[Haskell] GADT and constraints [Was: Rebindable syntax for monads and arrows]