J'essaie de comprendre les modèles de types et les classes génériques dans Haskell, mais je n'arrive pas à l'obtenir.Motifs de type et classes génériques dans Haskell
Quelqu'un pourrait-il expliquer en termes simples?
Dans [1]
J'ai lu que
« Appliquer des fonctions génériquement à tous les types de données, nous considérons les types de données de manière uniforme: à l'exception des types prédéfinis de base tels que Float, IO, et →, chaque type de données Haskell peut être considéré comme une somme étiquetée de produits éventuellement étiquetés. "
puis Unit
, :*:
et :+:
sont mentionnés. Tous les types de données dans Haskell sont-ils automatiquement des versions de ce qui est mentionné ci-dessus et si oui, comment puis-je comprendre comment un type de données spécifique est représenté en termes de :*:
, etc? Le guide de l'utilisateur pour les classes génériques (chapitre 7.16) sur haskell.org ne mentionne pas les types prédéfinis, mais ne devrait-il pas être traité dans chaque fonction si les modèles de type doivent être exhaustifs?
[1] Comparaison des approches de programmation générique dans Haskell, Ralf Hinze, Johan Jeuring et Andres Löh
OK. Donc j'ai besoin de tout définir en termes de ': +:' & c si je veux utiliser des classes génériques, mais qu'est-ce que '{| ... |} (...) '? Je comprends que c'est des cas mais je ne comprends pas quels cas j'ai eu. Je pense que je comprends '{| a: +: b |} (Inr y) 'et' {| Unit |} Unit' mais je ne comprends pas '{| a: +: b |} (1: b) 'et' {| Unité |} bs'. Deux autres questions: est-ce que tout le pattern ne correspondrait pas à la rupture de List si je commençais à redéfinir 'List' et est-il même possible de redéfinir les types de données? – finnsson