Dies ist jetzt in GHC 8.0 dank @ DominiqueDevrieses GHC ticket behoben.
Aufgrund von extended type defaulting ist dies in GHCi nicht sofort ersichtlich. Mit Ihrem Beispiel
> show _
<interactive>:7:6: error:
• Found hole: _h ::()
Or perhaps ‘_h’ is mis-spelled, or not in scope
• In the first argument of ‘show’, namely ‘_h’
In the expression: show _h
In an equation for ‘it’: it = show _h
• Relevant bindings include
it :: String (bound at <interactive>:7:1)
die Art des Lochs zu ()
Verzug geraten. Dies ist anscheinend die desired behavior, obwohl es ein Argument gibt, dass die erweiterte Standardisierung nicht auf Lücken angewendet werden sollte (als eine übliche Verwendung für sie ist es, den Compiler dazu zu bringen, Ihnen den abgeleiteten Typ zu sagen).
Dennoch, wenn Sie mit GHC kompilieren oder erweiterte Standardregeln in GHCi deaktivieren (über :set -XNoExtendedDefaultRules
), sehen wir das Ergebnis der Verbesserungen:
<interactive>:3:1: error:
• Ambiguous type variable ‘a0’ arising from a use of ‘show’
prevents the constraint ‘(Show a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance Show Ordering -- Defined in ‘GHC.Show’
instance Show Integer -- Defined in ‘GHC.Show’
instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’
...plus 22 others
...plus 11 instances involving out-of-scope types
(use -fprint-potential-instances to see them all)
• In the expression: show _
In an equation for ‘it’: it = show _
<interactive>:3:6: error:
• Found hole: _ :: a0
Where: ‘a0’ is an ambiguous type variable
• In the first argument of ‘show’, namely ‘_’
In the expression: show _
In an equation for ‘it’: it = show _
• Relevant bindings include
it :: String (bound at <interactive>:3:1)
AFAIK, dies derzeit nicht möglich ist, aber es wäre sicherlich nützlich sein. Vielleicht lohnt es sich, eine Feature-Anfrage auf dem GHC-Bug-Tracker dafür zu öffnen. – kosmikus
Ich stimme zu, dass dies nützlich wäre. Ich habe es als eine Feature-Anfrage auf dem GHC-Trac gemeldet: https://ghc.haskell.org/trac/ghc/ticket/9479 –
Für jetzt könnten Sie vor-Typ-Löcher Trick verwenden: 'show (undefined ::() ->()) '; GHC wird mehr im Typprüfungsfehler erzählen. – phadej