2012-03-04 16 views
12

मैं आज GHC ​​अद्यतन और मेरे छोटे प्रोग्राम काम करना बंद कर:जीएचसी 7.4 अपडेट ब्रेक हैकेल 98?

https://github.com/BrisFunctional/misere-oxo/blob/master/OXO/misere.hs

GHC अब संस्करण 7.4.1-2 है और मैं क्या अब यह समझने में चूक मानक haskell2010 को, haskell98 के बजाय कामयाब से। (जैसा कि मैंने GHC-pkg सूची के उत्पादन से देख सकते हैं):

haskell2010-1.1.0.1 
(haskell98-2.0.0.1) 

तो मैं अपने "आयात सूची" में बदल "आयात Data.List" जो मैंने सोचा था कि केवल समस्या थी लेकिन अब मैं निम्नलिखित करने के लिए :

misere.hs:1:1: Not in scope: `System.Environment.withArgs' 

यह तब से आता है जब से मैं कभी भी सिस्टम आयात नहीं करता हूं। पर्यावरण? कोई संकेत? धन्यवाद

संपादित करें: मैंने इस त्रुटि को दर्शाने के लिए github पर संस्करण अद्यतन किया। और वास्तव में फ़ाइल का उपयोग कर रहा है। सूची ghc पूरी तरह से फ़ाइल को संकलित करता है, इसलिए यह रनहास्केल है जो इस समस्या को उत्पन्न करता है ..

+1

क्या आपने 'ghc -XHaskell98' के साथ संकलन करने का प्रयास किया था? – nominolo

+0

उस विकल्प को मेरी GHC पर मौजूद नहीं है, मैं वास्तव में कुछ इसी तरह के लिए कर रहे हैं एक समस्या अब और देख रहा था .. –

उत्तर

14

आप केवल System.Random को Data.List को List, लेकिन यह भी Random बदल सकते हैं और System.Environment से getArgs आयात की जरूरत नहीं है (लेकिन इस समय, कोड getArgs और न ही कुछ न System.Random से उपयोग करता है, तो कुछ समय के लिए आपके पास उन को हटा सकते हैं आयात)।

पुराना गैर-पदानुक्रमित मॉड्यूल केवल haskell98 पैकेज से पहुंच योग्य है, जो अब base के साथ संगत नहीं है। इसका मतलब है कि haskell98 मॉड्यूल का उपयोग कर भी स्पष्ट रूप से कमांड लाइन पर base छुपा, या .cabal फ़ाइल की निर्भरता क्षेत्र में base लिस्टिंग नहीं की आवश्यकता है।

मैं थोड़ा त्रुटि संदेश से हैरान हूँ, मैं यह कहना

Could not find module `System' 
It is a member of the hidden package `haskell98-2.0.0.1'. 

उम्मीद होती है लेकिन यह है कि अंतर runhaskell के एक मोड़ हो सकता है।

+0

खैर खेद लिंक पर मौजूद संस्करण वही नहीं है जो मैं वास्तव में काम कर रहा था, मैंने वर्तमान संस्करण को जिथब पर धक्का दिया और इससे पहले मुझे त्रुटि दिखाई देती है। –

+0

यह अजीब है। मुझे runhaskell या सीधे खोल से नए संस्करण को चलाने में कोई त्रुटि नहीं है, और फ़ाइल में उस त्रुटि के लिए कोई कारण नहीं है। 'Runhaskell --version' रिपोर्ट क्या करती है? ऐसा नहीं है कि मैं 'runghc 7.4.1' के अलावा कुछ भी उम्मीद करता हूं, लेकिन मैं यह सुनिश्चित करना चाहता हूं। –

+0

हां मुझे बिल्कुल वही संस्करण मिलता है, मैंने अभी जीएचसी के पिछले संस्करण के साथ एक और मशीन पर कोशिश की है, और सब ठीक काम करता है ... शायद मैं अपने आर्कलिनक्स पर सभी हैकेल से संबंधित पैकेजों को पुनर्स्थापित करने का प्रयास करूंगा और देख सकता हूं कि यह काम करता है या नहीं । –

2

सबसे पहले, मुझे लगता है कि आप get.rns की वजह से System.Environment.withArgs का उपयोग करते हैं, जो ARG के साथ उपयोग करता है। Hackage.Haskell page for System.Environment

withArgs आयात करने का प्रयास करें, और शायद पूरे System.Environment आयात करें।

दूसरा, यह मामला हो सकता है कि List अब Data.List से अधिक होता है। आप Data.List के बजाय पूरे Prelude को शामिल करने का प्रयास करना चाहेंगे।

और शीर्ष लेख में सवाल का जवाब देने, GHC के हर अद्यतन Haskell98 फैली हुई है। और कुछ भाषा प्रज्ञा भी कुछ Haskell98 विनिर्देशों ब्रेक। लेकिन ज्यादातर पुस्तकालयों में परिवर्तन समस्याएं पैदा करते हैं, न कि जीएचसी खुद को अपडेट करता है।

उम्मीद है कि मैंने आपको समस्याओं को हल करने के लिए पर्याप्त दिया है।

+0

जैसा कि मैंने इन बातों को ऊपर लिखा नहीं है, और कार्यक्रम ठीक संकलित, कि त्रुटि runhaskell से आता है .. –

6

अपने कार्यक्रम शुद्ध है Haskell98 आप निम्नलिखित GHC invokation उपयोग कर सकते हैं:

ghc -package haskell98 -hide-package base 

दीर्घकालिक में, हालांकि, यह बेहतर है, तो आप कम से कम श्रेणीबद्ध मॉड्यूल के नाम करने के लिए उन्नत किया जाएगा। मॉड्यूल का नाम जानने के लिए Hoogle का उपयोग करें। उदा।, http://www.haskell.org/hoogle/?hoogle=withArgs निर्यात मॉड्यूल के रूप में System.Environment सूचीबद्ध करता है।