O que exatamente é o tipo "*" em Haskell?

Em Haskell, expressões (em nível de valor) são classificadas emtipos, que pode ser anotado com:: igual a:3 :: Int, "Hello" :: String, (+ 1) :: Num a => a -> a. Da mesma forma, os tipos são classificados emtipos. No GHCi, você pode inspecionar o tipo de uma expressão de tipo usando o comando:kind ou:k:

> :k Int
Int :: *
> :k Maybe
Maybe :: * -> *
> :k Either
Either :: * -> * -> *
> :k Num
Num :: * -> Constraint
> :k Monad
Monad :: (* -> *) -> Constraint

Existem definições flutuando em torno disso* é o tipo de "tipos concretos" ou "valores" ou "valores de tempo de execução". Veja, por exemplo,Learn You A Haskell. Quão verdadeiro é isso? Nós tivemosum pouco questões sobre tipos que abordam o tópico de passagem, mas seria bom ter uma explicação canônica e precisa de*.

o queexatamente faz* significar? E como isso se relaciona com outros tipos mais complexos?

Além disso, faça oDataKinds ouPolyKinds extensões mudam a resposta?

questionAnswers(3)

yourAnswerToTheQuestion