Hola, haciendo pruebas en el compilador, con el código dado el tipo es el de la respuesta b pero si le agrego el tipo de la respuesta c "a mano", el compilador lo acepta y me permite por ejemplo llamar foo (Left 9).
Entonces cuál sería la regla que usa el compilador para no tomar el tipo mas general por defecto?Si a foo le asignás el tipo Either a I -> P, luego la llamada a foo que hacés en la recursión tiene un tipo distinto, que es Either P I -> P.
En este caso estarías haciendo uso de "recursión polimórfica", que es un concepto que no vimos en el curso y requiere de que se anoten los tipos, porque la inferencia de ese tipo es indecidible.
saludos
En este caso estarías haciendo uso de "recursión polimórfica", que es un concepto que no vimos en el curso y requiere de que se anoten los tipos, porque la inferencia de ese tipo es indecidible.
saludos