Obecne zachowanie
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 _
Pożądane zachowanie
Byłoby miło, gdyby GHC również powiedział mi, że wpisany otwór ma Show
ograniczenie dotyczące klasy typu.
Różne
Wersja GHC 7.8.1
show (undefined :: () -> ())
; GHC powie więcej w błędzie kontroli typu.Odpowiedzi:
To jest już ustalona w GHC 8.0 dzięki @ DominiqueDevriese za bilet GHC .
Z powodu rozszerzonego domyślnego typu , nie jest to od razu oczywiste w GHCi. Z twoim przykładem
domyślny typ otworu
()
. Najwyraźniej jest to pożądane zachowanie , chociaż należy argumentować, że rozszerzone domyślne domyślne nie powinny mieć zastosowania do dziur (ponieważ ich powszechnym zastosowaniem jest skłonienie kompilatora do podania wywnioskowanego typu).Niemniej jednak, jeśli kompilujesz z GHC lub wyłączysz rozszerzone reguły domyślne w GHCi (via
:set -XNoExtendedDefaultRules
), zobaczymy wynik ulepszeń:źródło
Obecnie nie jest to możliwe, ale można go dodać do GHC zgodnie ze spekulacjami.
źródło
Wypróbuj
it :: _ => _
GHC 8.8+.źródło