¿Qué es exactamente el tipo "*" en Haskell?
En Haskell, las expresiones (de nivel de valor) se clasifican entipos, que se puede anotar con::
al igual que:3 :: Int
, "Hello" :: String
, (+ 1) :: Num a => a -> a
. Del mismo modo, los tipos se clasifican entipos. En GHCi, puede inspeccionar el tipo de expresión de tipo usando el comando:kind
o:k
:
> :k Int
Int :: *
> :k Maybe
Maybe :: * -> *
> :k Either
Either :: * -> * -> *
> :k Num
Num :: * -> Constraint
> :k Monad
Monad :: (* -> *) -> Constraint
Hay definiciones flotando alrededor de eso*
es el tipo de "tipos concretos" o "valores" o "valores de tiempo de ejecución". Ver, por ejemplo,Learn You A Haskell. ¿Qué tan cierto es eso? Hemos tenidounos pocos preguntas acerca de los tipos que abordan el tema de pasada, pero sería bueno tener una explicación canónica y precisa de*
.
Quéexactamente hace*
¿media? ¿Y cómo se relaciona con otros tipos más complejos?
Además, haz elDataKinds
oPolyKinds
extensiones cambian la respuesta?