[Haskell] Fixed-length vectors in Haskell, Part 1: Using GADTs