क्या जीएचसी बनाने का एक तरीका टाइप किए गए छेदों के वर्ग की बाधाएं प्रदान करना है?


103

वर्तमान व्यवहार

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 _

वांछित व्यवहार

यह अच्छा होगा यदि जीएचसी मुझे यह भी बताएगा कि टाइप किए गए छेद में Showटाइप क्लास की बाधा है।

विविध

जीएचसी संस्करण 7.8.1


16
AFAIK, यह वर्तमान में संभव नहीं है, लेकिन यह निश्चित रूप से उपयोगी होगा। इसके लिए GHC बग ट्रैकर पर एक सुविधा अनुरोध खोलने लायक हो सकता है।
कोसमिकस

11
मैं मानता हूं कि यह उपयोगी होगा। मैंने इसे GHC trac पर एक फ़ीचर अनुरोध के रूप में रिपोर्ट किया: ghc.haskell.org/trac/ghc/ticket/9479
डोमिनिक Devriese

4
अभी के लिए आप पूर्व-प्रकार-छेद चाल का उपयोग कर सकते हैं show (undefined :: () -> ()):; जीएचसी टाइप-चेक त्रुटि में अधिक बताएगा।
phadej

1
क्या यह एक सुविधा का अनुरोध है, या एक वास्तविक प्रश्न है? यही है, क्या आप यह सुनिश्चित करने के लिए जानते हैं कि आपकी इच्छा के अनुसार जीएचसी बनाने का कोई तरीका नहीं है, या क्या संभावना है कि आप वर्तमान संकलक के साथ जो चाहें प्राप्त कर सकते हैं, लेकिन आप सुनिश्चित नहीं हैं कि कैसे?
stakx - अब

1
@stakx यह दोनों का एक सा है। मूल रूप से जब मैंने यह सवाल लिखा था तो मैं उलझन में था कि जीएचसी टाइप क्लास की कमी क्यों नहीं प्रदान करता है, और सोच रहा था कि मैं टाइप किए गए छेदों का गलत उपयोग कर रहा हूं। तब कुछ ने मुझे बताया कि वर्तमान में ऐसा करना संभव नहीं है, लेकिन जीएचसी में जोड़ा जा सकता है। इसलिए तब मैं उम्मीद कर रहा था कि इसे जल्द ही जोड़ा जाएगा। कई लोग इसका इस्तेमाल करना चाहते हैं। फडेज की चाल काम के समय में लगती है, लेकिन टाइप किए गए छेद आधारित समाधान के रूप में सुरुचिपूर्ण या आसान उपयोग नहीं है।
विसेक

जवाबों:


2

यह अब GHC 8.0 में @ DominiqueDevriese के GHC टिकट के लिए निर्धारित किया गया है ।

विस्तारित प्रकार डिफ़ॉल्ट के कारण , यह जीएचसीआई में तुरंत स्पष्ट नहीं है। अपने उदाहरण के साथ,

> 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)

छेद का प्रकार डिफ़ॉल्ट है ()। यह स्पष्ट रूप से वांछित व्यवहार है , हालांकि एक तर्क है कि विस्तारित डिफ़ॉल्ट को छेद पर लागू नहीं किया जाना चाहिए (जैसा कि उनके लिए एक सामान्य उपयोग आपको संकलित करने के लिए अनुमान लगाने का प्रकार प्राप्त करना है)।

फिर भी, यदि आप जीएचसी के साथ संकलन करते हैं या जीएचसीआई (के माध्यम से :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)

1

वर्तमान में यह संभव नहीं है। लेकिन अटकलों के अनुसार इसे जीएचसी में जोड़ा जा सकता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.