2011-01-02 9 views
6

जब मैं किसी त्रुटि में भाग गया तो मैं अस्तित्व के रिकॉर्ड के लिए रिकॉर्ड अपडेट का उपयोग करने का प्रयास कर रहा था। एक त्वरित Google ने मुझे feature request #2595 पर ले जाया, जो इसे जीएचसी के लिए संस्करण 6.8.3 में वापस लागू करने के रूप में दिखाता है। मैं 6.10.4 उपयोग कर रहा हूँ, इसलिए मैं यह काम करना चाहिए लगता है, लेकिन सुविधा का अनुरोध से उदाहरण कोड:हास्केल: मौजूदा प्रकार के लिए रिकॉर्ड अपडेट

test.hs:10:8: 
    Record update for the non-Haskell-98 data type `Foo' is not (yet) supported 
    Use pattern-matching instead 
    In the expression: rec {foo = id} 
    In the definition of `f': f rec = rec {foo = id} 

test.hs:13:8: 
    Record update for the non-Haskell-98 data type `Foo' is not (yet) supported 
    Use pattern-matching instead 
    In the expression: rec {bar = 3} 
    In the definition of `g': g rec = rec {bar = 3} 
: के रूप में सुविधा का अनुरोध में की शिकायत की

{-# LANGUAGE ExistentialQuantification,Rank2Types #-} 
module Foo where 

data Foo = forall a . Foo { foo :: a -> a, bar :: Int } 

x :: Foo 
x = Foo { foo = id, bar = 3 } 

f :: Foo -> Foo 
f rec = rec { foo = id } 

g :: Foo -> Foo 
g rec = rec { bar = 3 } 

ही त्रुटियों उपज

क्या यह किसी बिंदु पर एक जानबूझकर गिरावट वाली सुविधा थी, या क्या मुझे एक बग रिपोर्ट दर्ज करनी चाहिए?

उत्तर

5

असल में, ट्रैक पर्ची का कहना है कि इसे संस्करण 6.12 में लागू किया गया था - बग को संस्करण 6.8.3 में मिला था। तो आप एक ऐसे संस्करण का उपयोग कर रहे हैं जो ठीक से पुराना है।

इसके अलावा, फ़िक्स के लिए चेंजलॉग प्रविष्टि यह इंगित करती है कि यह पूरी तरह से ठीक नहीं है; आपको अभी भी पहली त्रुटि मिल जाएगी, बस दूसरा नहीं। अगर बाकी समस्या के लिए पहले से ही एक बग रिपोर्ट नहीं है, तो मैं कहूंगा कि आगे बढ़ें और फ़ाइल करें।

+2

आह का उपयोग कर। मुझे यह मानकर एक गूंगा गलती करने से बचाने के लिए धन्यवाद कि इसे मेरे संस्करण में ठीक किया जाना चाहिए। जीएचसी अपडेट करने के लिए बंद! – rampion

+0

आह, नया और अलग त्रुटि संदेश, बस के रूप में आप ने कहा। लेकिन एक का मानना ​​है कि यह है कि मैं कुछ गलत कर रहा हूँ, नहीं है कि यह असंभव है। – rampion

3

अभी भी एक और तरीका है!


आप

data Foo = Foo { foo :: forall a . a -> a, bar :: Int } 

को

data Foo = forall a . Foo { foo :: a -> a, bar :: Int } 

से डेटा प्रकार परिभाषा को बदलते हैं, तो यह त्रुटि के बिना संकलित करता है। - GHC-6.12.2.20100531

संबंधित मुद्दे