Vector
из Data.Vector.Sized
принимает размер в качестве аргумента первый , а не второй, в отличие от связанного руководства. Так что вам нужно
type Hand n = Vector n Card
Что касается вашего варианта GADT, вы просто пропускаете тип результата конструктора.
data Hand (n :: Nat) where
Hand :: SNat n -> Vector n Card -> Hand n
^^^^^^^^^^
Типам конструктора GADT всегда нужен кодомен любого типа, который они определяют. Тем не менее, я думаю, что SNat
здесь не нужно - если информация о том, сколько карт находится в руке, приходит извне, нет никакой причины удерживать ее и внутри.