Comportamento atual
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 _
Comportamento desejado
Seria bom se o GHC também me dissesse que o buraco digitado tem a Show
restrição de classe de tipo.
Misc
GHC Versão 7.8.1
show (undefined :: () -> ())
; GHC dirá mais no erro de verificação de tipo.Respostas:
Isso agora foi corrigido no GHC 8.0 graças ao tíquete GHC de @DominiqueDevriese .
Devido ao padrão de tipo estendido , isso não é imediatamente óbvio no GHCi. Com o seu exemplo,
o tipo de furo é o padrão
()
. Este é aparentemente o comportamento desejado , embora haja um argumento a ser feito de que o padrão estendido não deve se aplicar a lacunas (já que um uso comum para eles é fazer com que o compilador informe o tipo inferido).No entanto, se você compilar com GHC ou desativar as regras padrão estendidas no GHCi (via
:set -XNoExtendedDefaultRules
), vemos o resultado das melhorias:fonte
Não, atualmente não é possível. Mas pode ser adicionado ao GHC de acordo com as especulações.
fonte
Experimentar
it :: _ => _
no GHC 8.8+.fonte