Более высокие классы рангов выглядят очень весело. Из Haskell wikibook приведен этот пример:
foo :: (forall a. a -> a) -> (Char,Bool)
foo f = (f 'c', f True)
Теперь мы можем оценить foo id
без взрыва компилятора. Этот пример быстро следует в книге примером реального мира, который я видел в нескольких других местах: ST monad и runST
. Это довольно круто.
Но мне еще предстоит встретить ситуацию, когда я решаю проблему, написав свою собственную функцию с аргументом более высокого ранга. У вас есть? Какие примеры у вас в полиморфизме ранга 2 или ранга-n в дикой природе?