Текущее поведение
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 _
Желаемое поведение
Было бы хорошо, если бы GHC также сообщил мне, что типизированное отверстие имеет Show
ограничение класса типа.
Разное
GHC версии 7.8.1
show (undefined :: () -> ())
; GHC расскажет больше об ошибке проверки типа.Ответы:
Сейчас эта проблема решена в GHC 8.0 благодаря @ DominiqueDevriese в GHC билет .
Из-за использования расширенного типа по умолчанию это не сразу очевидно в GHCi. На вашем примере
тип отверстия установлен по умолчанию
()
. Очевидно, это желаемое поведение , хотя есть аргумент, что расширенное значение по умолчанию не должно применяться к дырам (поскольку обычно они используются для того, чтобы заставить компилятор сообщить вам предполагаемый тип).Тем не менее, если вы скомпилируете с GHC или отключите расширенные правила по умолчанию в GHCi (через
:set -XNoExtendedDefaultRules
), мы увидим результат улучшений:источник
Нет, в настоящее время это невозможно, но, согласно предположениям, он может быть добавлен в GHC.
источник
Попробуйте
it :: _ => _
в GHC 8.8+.источник