Los tipos de rango superior parecen muy divertidos. Desde el Haskell wikibook viene este ejemplo:¿Qué usos ha encontrado para los tipos de rango superior en Haskell?
foo :: (forall a. a -> a) -> (Char,Bool)
foo f = (f 'c', f True)
Ahora podemos evaluar foo id
sin el compilador de la explosión. Este ejemplo se sigue rápidamente en el libro por el ejemplo del mundo real que he visto en algunos otros lugares: la mónada ST y runST
. Eso es muy bonito.
Pero todavía tengo que encontrarme con una situación en la que resuelvo un problema escribiendo mi propia función con un argumento de mayor rango. ¿Tienes? ¿Qué ejemplos tienes de polimorfismo de rango 2 o rango n en la naturaleza?