Perilaku saat ini
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 _
Perilaku yang diinginkan
Alangkah baiknya jika GHC juga akan memberi tahu saya bahwa lubang yang diketik memiliki Show
batasan kelas jenis.
Misc
Versi GHC 7.8.1
show (undefined :: () -> ())
; GHC akan memberi tahu lebih banyak dalam kesalahan tipe-cek.Jawaban:
Ini sekarang telah diperbaiki dalam GHC 8.0 berkat tiket GHC @ DominiqueDevriese .
Karena default tipe diperpanjang , ini tidak langsung terlihat di GHCi. Dengan teladan Anda,
jenis lubang default
()
. Tampaknya ini adalah perilaku yang diinginkan , meskipun ada argumen yang harus dibuat bahwa perluasan default seharusnya tidak berlaku untuk lubang (karena penggunaan umum untuk lubang tersebut adalah agar kompilator memberi tahu Anda tipe yang disimpulkan).Namun demikian, jika Anda mengompilasi dengan GHC atau menonaktifkan aturan default tambahan di GHCi (melalui
:set -XNoExtendedDefaultRules
), kami melihat hasil dari peningkatan:sumber
Tidak saat ini tidak mungkin. Tapi itu dapat ditambahkan ke GHC sesuai spekulasi.
sumber
Coba
it :: _ => _
di GHC 8.8+.sumber