현재 행동
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
답변
이것은 @DominiqueDevriese의 GHC 티켓 덕분에 GHC 8.0에서 수정되었습니다 .
확장 된 유형 기본값 으로 인해 GHCi에서 즉시 명확하지 않습니다. 당신의 예를 들어,
> 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)
구멍 유형은 기본적으로로 설정됩니다 ()
. 이것은 분명히 원하는 동작 이지만 확장 된 기본값이 홀에 적용되지 않아야한다는 주장이 있습니다 (일반적인 용도는 컴파일러가 유추 된 유형을 알려주는 것입니다).
그럼에도 불구하고 GHC로 컴파일하거나 GHCi에서 확장 기본 규칙을 비활성화하면 (을 통해 :set -XNoExtendedDefaultRules
) 개선 된 결과를 볼 수 있습니다.
<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)
답변
현재로서는 불가능하지만 추측에 따라 GHC에 추가 될 수 있습니다.
답변
시도 it :: _ => _
GHC 8.8+에서.