Điều này hiện đã được khắc phục ở GHC 8.0 nhờ vé GHC của @ DominiqueDevriese .
Do mặc định kiểu mở rộng , điều này không rõ ràng ngay trong GHCi. Với ví dụ của bạn,
> 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)
loại lỗ được đặt mặc định ()
. Đây rõ ràng là hành vi mong muốn , mặc dù có một lập luận rằng mặc định mở rộng không nên áp dụng cho các lỗ (vì cách sử dụng phổ biến của chúng là để trình biên dịch cho bạn biết kiểu suy luận).
Tuy nhiên, nếu bạn biên dịch với GHC hoặc tắt các quy tắc mặc định mở rộng trong GHCi (qua :set -XNoExtendedDefaultRules
), chúng tôi sẽ thấy kết quả của những cải tiến:
<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)