Em Haskell, os “tipos de classe superior” são realmente tipos? Ou eles apenas denotam coleções de tipos * concretos * e nada mais?

Funções paramametralmente polimórficas

Considere a seguinte função:

f :: a -> Int
f x = (1 :: Int)

Podemos dizer que o tipo def éa -> Int, e essaf portanto, é do tipo "polimórfico".

Qual das alternativas a seguir é a maneira mais precisa de pensarf?

Existe de fato umsolteiro f do tipoa -> Int. No entanto, pode ser usado como umf :: Int -> Int, comof :: Double -> Int, e assim por diante.

Literalmente falando, o tipo def não éa -> Int. De fato, essa é apenas uma maneira abreviada de dizer que existe umafamília de funçõesf cujo tipo é concreto (ou seja, existe umf :: Int -> Int, af :: Double -> Double, e assim por diante; além disso, cada uma dessas funções é distinta uma da outra).

Tipos superiores

Da mesma forma, podemos considerar a seguinte declaração de tipo:

data Maybe a = Just a | Nothing

E pergunte qual das duas visualizações é mais correta:

Não hásolteiro tipoMaybe; de fato, existe apenas uma família de tipos concretos (Maybe Int, Maybe String, etc) e nada mais.

Há simde fato um único tipoMaybe. Esse tipo é do tipo superior. Quando dizemos que é um "tipo", queremos dizer isso literalmente (não como uma abreviação de (1)). Acontece que também podemos escreverMaybe Int, Maybe Doublee assim por diante para gerardistinto tipos (que são concretos). Mas, no final do dia (ou seja):Maybe, Maybe InteMaybe String denotartrês tipos distintos, dois dos quais são concretos e um dos de maior qualidade.

Resumo da pergunta

Em Haskell, os "tipos de classe superior" são realmente tipos? Ou são apenas os tipos concretos "os tipos reais" e, quando falamos de "tipos superiores", estamos apenas denotando umfamília de tipos de concreto. Além disso, as funções paramametralmente polimórficas denotam funções de umtipo únicoou elesapenas denotar umcoleção funções detipos de concreto (e nada mais)?

questionAnswers(2)

yourAnswerToTheQuestion