No se pudo hacer coincidir el tipo esperado 'a' con el tipo real `[a] '

Pude ejecutar el siguiente código sin fallas

myLast :: [a] -> a
myLast [] = error "Can't call myLast on an empty list!"
myLast (x:_) = x

pero estoy recibiendo este errorCouldn't match expected type `a' with actual type `[a]'. `a' is a rigid type variable bound by the type signature for myLast :: [a] -> a para el siguiente código:

myLast :: [a] -> a
myLast [] = error "Can't call myLast on an empty list!"
myLast (_:x) = x

Soy un principiante en Haskell y el mensaje de error es demasiado griego y latino para mí. Por lo que puedo entender, el compilador no puede inferir el tipo en el segundo caso. ¿Puede alguien señalarme lo que realmente está sucediendo aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta