2011-03-19 10 views
18

Duplicar posible:
Haskell Weird Kinds: Kind of (->) is ?? -> ? -> *En GHCi, ¿por qué el tipo de la función arrow `: kind (->)` incluye signos de interrogación `(->) :: ?? ->? -> * `?

En GHCi (versión 7.0.2), si pido el tipo del tipo de función, el resultado no tiene signos de interrogación:

Prelude> :kind (->) 
(->) :: ?? -> ? -> * 

¿Por qué el tipo incluye signos de interrogación en lugar de solo asteriscos * -> * -> *? ¿Qué significan los signos de interrogación? ¿Por qué otros tipos solo usan asteriscos?

Prelude> :kind (,) 
(,) :: * -> * -> * 
+1

IMO, me gustaría más, si GHC solo muestra estos contextos extendidos si se le da un pragma especial a GHCi, ya que confunden al principiante. – fuz

+1

Véase también la explicación más detallada de Don Stewart [aquí] (http://stackoverflow.com/questions/3034264/haskell-weird-kinds/3034295#3034295). –

Respuesta

16

Los ? y ?? tipos se refieren a las extensiones de GHC, específicamente los tipos sin embalaje. http://hackage.haskell.org/trac/ghc/wiki/IntermediateTypes tiene un diagrama que muestra las relaciones entre los tipos extendidos ? (todos los tipos posibles), # (tipos sin caja), ?? (tipos sin caja en caja o normales - "extremo superior de # y *"), (#) (tuplas sin caja, que sólo puede ser utilizado en un pequeño número de contextos). (El tipo estándar * se refiere a los tipos de cajas normales.)

Cuestiones relacionadas