Entendendo esta definição de HList

Sou relativamente novo em Haskell e estou tentando entender uma das definições deHList.

data instance HList '[] = HNil
newtype instance HList (x ': xs) = HCons1 (x, HList xs)
pattern HCons x xs = HCons1 (x, xs)

Eu tenho algumas perguntas específicas:

O que é'[] e(x ': xs) sintaxe que estou vendo? Parece quase como a correspondência de padrões nos parâmetros do tipo variadico, mas nunca vi essa sintaxe antes, nem estou familiarizado com os parâmetros do tipo variadico no Haskell. Eu acho que isso faz parte deFamílias Tipo do GHC, mas não vejo nada sobre isso na página vinculada e é bastante difícil pesquisar sintaxe no Google.

Existe algum ponto em usar umnewtype declaração com uma tupla (em vez de umadata declaração com dois campos) além de evitar o boxe deHCons1?

questionAnswers(2)

yourAnswerToTheQuestion