Hola,
Van las respuestas:
1) Porque de la aplicación a 'a', ya sabés que el tipo a es Char, entonces el String a leer tendría que contener la representación de un Char.
Si, por ejemplo, el código de foo fuera el siguiente funcionaría bien:
foo :: Read a => a -> (a,a)
foo x = (x,read "\'9\'")
2) El problema de la opción b es que es demasiado polimórfica. Dice que el primer componente del par resultante puede ser de cualquier tipo a, cuando en realidad no es así, dado que tiene que ser de un tipo a que sea instancia de Dummy. Notar que el valor de ese componente es el resultado de llamar a dummy.
saludos
Van las respuestas:
1) Porque de la aplicación a 'a', ya sabés que el tipo a es Char, entonces el String a leer tendría que contener la representación de un Char.
Si, por ejemplo, el código de foo fuera el siguiente funcionaría bien:
foo :: Read a => a -> (a,a)
foo x = (x,read "\'9\'")
2) El problema de la opción b es que es demasiado polimórfica. Dice que el primer componente del par resultante puede ser de cualquier tipo a, cuando en realidad no es así, dado que tiene que ser de un tipo a que sea instancia de Dummy. Notar que el valor de ese componente es el resultado de llamar a dummy.
saludos