
Porque, la definición de A es correcta, entonces se puede descartar la (a).
Pero cuando llegué a la (b) lo primero que observé es que se hace "head ps", y que es para el caso que se usa el constructor "A [A]", pero en ese caso, A [] tiparía correctamente, entonces al momento de llamar a "copia (A[])" entraría por el constructor A en la 3era definición, haría "ps = map copia []" entonces "ps = []" y luego se ejecutaría "head []" y eso da error porque head tiene como precondición que la lista no sea vacía.
Entonces, la duda es ¿Qué parte de este razonamiento está mal?, o si en su defecto lo que está mal es la solución.
Muchas gracias!