Je ne voulais pas désactiver la fonction qui vérifie la liaison d'accompagnement dans Haskell.Haskell - désactiver la vérification de liaison d'accompagnement haskell
La raison pour laquelle je veux faire cela est de pouvoir mettre en œuvre la preuve par contradiction. La signature de type suivante n'a aucune liaison, et ne devrait pas l'être.
zeroDoesNotEqualOne :: Refl Z (S Z) -> Bottom
Il n'y a pas habitant du type Refl Z (S Z)
, et donc il devrait y avoir aucune liaison.
Dans l'extrait ci-dessus les types signifient ce que vous attendez de telle sorte que S Z
est le Peano naturel pour 1 et Refl
n'a qu'un seul habitant de type Refl a a
J'ai essayé, mais suivant compile aussi: 'zeroNeqOne :: Z == Z -> a' qui il shouldn » t (compilation comme 'ghci ZeroNeqOne.hs -XDataKinds -fwarn-incomplete-patterns -Werror'). –
Cela semble être [un bug dans le vérificateur de couverture] (https://ghc.haskell.org/trac/ghc/ticket/10746). Donc, pour l'instant, vous devrez faire attention lorsque vous utilisez un boîtier vide. Cela étant dit, ce n'est pas plus dangereux que d'avoir des signatures de type sans définition d'accompagnement comme vous l'avez demandé. – gallais
L'espoir était que je pourrais réaliser ceci en utilisant aucune liaison d'accompagnement, également avec une erreur de temps de compilation quand il y a un modèle. Je suppose que le théorème de Realt prouve qu'il est préférable de faire des choses sérieuses de toute façon. Mais merci! –