Estoy estudiando sistemas de tipos puros, particularmente el cálculo de construcciones, y tratando de usar una codificación para tipos recursivos, lo que, según Philip Wadler, es posible . Como ejemplo, estoy usando la biblioteca Morte Haskell para codificar los números de Scott tal como los da Cardelli .
Un resumen de la codificación es como tal: dado un tipo recursivo (positivo) ...
... podemos codificarlo como un tipo en el Sistema F como ...
... o, usando la notación de sistemas de tipo puro (con un explícito ) ...
...ya que es un constructor de tipos ( es el tipo de tipos).
Para codificar tales, necesitamos declarar tres funciones, , y , según Wadler, y utilizado por Cardelli en la codificación de los números de Scott.
doblar: Todo X. (FX -> X) -> T -> X
doblar = \ X. \ k: FX -> X. \ t: T. t X k
en: FT -> T
in = \ s: F T. \ X. \ k: FX -> X. k (F (doblar X k) s).
(Dónde es .)
Es trivial escribir el funcionar como se indica. Pero al intentar escribir elfunción, no parece mecanografiar. La expresion tiene tipo y debe ser de tipo . Entonces inferimos que debe ser de tipo (se parece a fmap
) Esto no comprueba, porque F
es un constructor de tipos (de tipo)
Esto no parece un error tipográfico ... ¿me estoy perdiendo algo?
fuente
fmap
! Obtuve cero experiencia en teoría de categorías, pero en realidad la encontré hace unos 10 minutos en "Una nota sobre tipos de datos categóricos" (GC Wralth). Ahora podía escribir la función correcta, funcionaba de maravilla. Muchas gracias dr. Wadler! : D