J'essaye de faire de la programmation de type hoopy, et ça ne marche pas. Je m'arrache les cheveux à essayer de comprendre pourquoi GHC ne parvient pas à déduire les signatures de type que je veux.
Existe-t-il un moyen de faire en sorte que GHC dites-moi ce qu'il fait ?
J'ai essayé -ddump-tc
qui ne fait qu'imprimer les signatures de type finales. (Oui, elles sont fausses. Merci, je le savais déjà).
J'ai aussi essayé -ddump-tc-trace
qui jette ~70KB de charabia incompréhensible. (En particulier, je ne vois pas d'identifiants écrits par l'utilisateur qui soient mentionnés. partout .)
Mon code est le suivant si proche fonctionne, mais une variable de type supplémentaire continue d'apparaître. Pour une raison quelconque, GHC ne voit pas que cette variable doit être complètement déterminée. En effet, si je manuellement écrire la signature de type cinq-mile, GHC l'accepte joyeusement. Donc il me manque clairement une contrainte quelque part... mais où ? !? >_<
7 votes
Vous devriez poster au moins un peu de code. Pour autant que je sache, les programmes de type-level sont mieux débogués avec
:kind!
, des trous etAny
en tant que trou de niveau de type.2 votes
Le code que j'ai est vaste et compliqué, et je doute que quiconque soit capable de le suivre. Ce que je demande, c'est des conseils sur la façon de trouver le problème, afin que je sache où commencer à chercher.
1 votes
Ce commentaire a pour seul but de me permettre de dire plus tard : supposez-vous qu'une famille de type est injective ?
2 votes
@Cactus LOL ! J'ai des GADTs, la quantification existentielle, des types rank-N et des instances qui se chevauchent... mais pas de familles de types.
0 votes
Hé, ça valait le coup d'essayer :)
0 votes
Vous avez trouvé ?
0 votes
La réponse est ici, elle a déjà été donnée stackoverflow.com/a/34754070/4620369
0 votes
Duplicata possible de Comment déboguer du code au niveau du type ?