Comportement actuel
Prelude> show _
<interactive>:7:6:
Found hole ‘_’ with type: a0
Where: ‘a0’ is an ambiguous type variable
Relevant bindings include it :: String (bound at <interactive>:7:1)
In the first argument of ‘show’, namely ‘_’
In the expression: show _
In an equation for ‘it’: it = show _
Comportement désiré
Ce serait bien si GHC me disait également que le trou typé a la Show
contrainte de classe de type.
Divers
GHC version 7.8.1
show (undefined :: () -> ())
; GHC en dira plus dans l'erreur de vérification de type.Réponses:
Ce problème est désormais résolu dans GHC 8.0 grâce au ticket GHC de @ DominiqueDevriese .
En raison de la configuration par défaut du type étendu , ce n'est pas immédiatement évident dans GHCi. Avec votre exemple,
le type de trou est défini par défaut
()
. C'est apparemment le comportement souhaité , bien qu'il y ait un argument à faire pour dire que la valeur par défaut étendue ne devrait pas s'appliquer aux trous (car une utilisation courante pour eux est de demander au compilateur de vous indiquer le type inféré).Néanmoins, si vous compilez avec GHC ou désactivez les règles par défaut étendues dans GHCi (via
:set -XNoExtendedDefaultRules
), nous voyons le résultat des améliorations:la source
Non actuellement, ce n'est pas possible, mais il peut être ajouté à GHC selon les spéculations.
la source
Essayez
it :: _ => _
dans GHC 8.8+.la source