Aktuelles Verhalten
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 _
Gewünschtes Verhalten
Es wäre schön, wenn GHC mir auch sagen würde, dass das typisierte Loch die Show
Typklassenbeschränkung hat.
Sonstiges
GHC Version 7.8.1
show (undefined :: () -> ())
; GHC wird mehr in der Typprüfung Fehler erzählen.Antworten:
Dies ist jetzt in GHC 8.0 dank des GHC-Tickets von @ DominiqueDevriese behoben .
Aufgrund der Standardeinstellung für erweiterte Typen ist dies in GHCi nicht sofort ersichtlich. Mit Ihrem Beispiel,
Der Typ des Lochs ist standardmäßig
()
. Dies ist anscheinend das gewünschte Verhalten , obwohl ein Argument vorgebracht werden muss, dass erweiterte Standardeinstellungen nicht für Löcher gelten sollten (da diese häufig verwendet werden, um den Compiler zu veranlassen, Ihnen den abgeleiteten Typ mitzuteilen).Wenn Sie jedoch mit GHC kompilieren oder erweiterte Standardregeln in GHCi (via
:set -XNoExtendedDefaultRules
) deaktivieren , sehen wir das Ergebnis der Verbesserungen:quelle
Nein, derzeit ist es nicht möglich. Aber es kann gemäß den Spekulationen zu GHC hinzugefügt werden.
quelle
Versuchen Sie es
it :: _ => _
in GHC 8.8+.quelle