Comprender esta definición de HList

Soy relativamente nuevo en Haskell, y estoy tratando de entender una de las definiciones deHList.

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

Tengo un par de preguntas específicas:

Cuál es el'[] y(x ': xs) sintaxis que estoy viendo? Casi parece que coincide con el patrón en los parámetros de tipo variadic, pero nunca he visto esta sintaxis antes, ni estoy familiarizado con los parámetros de tipo variable en Haskell. Supongo que esto es parte deFamilias Tipo de GHC, pero no veo nada al respecto en la página vinculada, y es bastante difícil buscar la sintaxis en Google.

¿Hay algún punto en usar unnewtype declaración con una tupla (en lugar de unadata declaración con dos campos) además de evitar el boxeo deHCons1?

Respuestas a la pregunta(2)

Su respuesta a la pregunta