Parece ser bien sabido que los lenguajes de programación no pueden tener sumas, productos y falta de determinación juntos.
Q1 . ¿Es esto cierto? A continuación (o en el enlace anterior que di) hay un argumento parcial.
Sin embargo, la programación genérica de Hinze con adjunciones ignora el problema, incluso después de discutir con cierta precisión cuál es la categoría involucrada. En particular, habla (aparentemente sin reservas) acerca de que Haskell está modelado por la categoría de órdenes parciales continuas estrictas y que tiene sumas y productos. Pero sabemos que Haskell no tiene sumas (¿verdad?). (Parte del documento usa lugar, pero eso no permite la no terminación).S e t
Q2 Entonces, ¿qué me estoy perdiendo? Veo cuatro opciones:
- La gente a menudo ignora la no terminación a propósito cuando habla de Haskell. Quizás este documento también lo haga. Pero entonces, ¿por qué uno mencionaría los CPO?
- La barrera que discuto se puede evitar de manera inteligente. En particular, el papel modela funciones no estrictas de Haskell mediante funciones estrictas , por otras razones.f : A ⊥ → B
- El documento menciona la limitación y me perdí eso. He dedicado algo de esfuerzo a buscar esta mención y no he podido encontrar ninguna.
- Este es un error real, y como todos reclaman, Haskell carece de sumas categóricas (como lo acuerdan otras personas), a pesar de que las afirmaciones en papel
Either
son tales. En cambio, todo funciona bien en idiomas totales con tipos inductivos y coinductores.
Antecedentes
Es bien sabido que, en una categoría cerrada bicartesiana (BCCC), si el objeto inicial y el final coinciden (es decir, si la categoría tiene un objeto cero), la categoría colapsa (con todos los tipos isomorfos) por para todos .A
Esto significa, por ejemplo, que la categoría de conjuntos puntiagudos , con su objeto cero, no puede ser bicartesiana cerrada.