J'ai cherché sur Internet et je ne trouve pas les explications de CHI, qui ne sont pas rapidement dégénérer en une conférence sur la théorie logique qui est radicalement dessus de ma tête. (Ces gens parlent comme si "intuitionniste proposition de calcul" est une phrase qui en réalité signifie quelque chose pour l'homme normal!)
En gros, CHI dit que les types sont des théorèmes, et les programmes sont les preuves de ces théorèmes. Mais ce que l'enfer est-ce que même moyenne??
Jusqu'à présent, j'ai compris cela:
Envisager
id :: x -> x
. Son type dit "étant donné que X est vrai, on peut conclure que X est vrai". Semble raisonnable théorème de moi.Maintenant, considérons
foo :: x -> y
. Comme tout Haskell programmeur vais vous dire, c'est impossible. Vous ne pouvez pas écrire cette fonction. (Eh bien, sans tricher, de toute façon.) Lire comme un théorème, il dit: "étant donné que X est vrai, nous pouvons conclure que tout Y est vrai". C'est évidemment une absurdité. Et, bien sûr, vous ne pouvez pas écrire cette fonction.Plus généralement, les arguments de la fonction peut être considéré comme "ce qui est supposé être vrai", et le type de résultat peut être considéré comme "chose qui est vrai en supposant que toutes les autres choses sont". Si il y a un argument de fonction, disons
x -> y
, nous pouvons prendre cela comme une hypothèse que X est vrai implique que Y doit être vrai.Par exemple,
(.) :: (y -> z) -> (x -> y) -> x -> z
peut être considéré comme "en supposant que Y implique Z, X implique Y et que X est vrai, nous pouvons conclure que Z est vrai". Qui semble logiquement sensible pour moi.
Maintenant, ce que l'enfer n' Int -> Int
moyenne?? o_O
La seule réponse sensée, je peux venir, c'est ça: Si vous avez une fonction X -> Y -> Z, puis la signature d'un type dit "en supposant qu'il est possible de construire une valeur de type X, et un autre de type Y, alors il est possible de construire une valeur de type Z". Et le corps de la fonction décrit exactement comment vous feriez cela.
Cela semble logique, mais ce n'est pas très intéressant. Donc clairement, il doit y avoir plus que cela...