आरडब्ल्यूएच का मुख्य मुद्दा
ये पुराना है। RWH को GHC के टाइम वर्जन 6.8 पर लिखा गया था। 6.8 का उपयोग आधार संस्करण 3.0.xx 6.10.1 ने पहले से ही 4.0.0.0 का उपयोग किया, जिसने कई बदलाव पेश किए । और वह सिर्फ 6.8 से 6.10 की छलांग है। जीएचसी का वर्तमान संस्करण 7.10 है। मोनाड बदल दिए गए हैं। वर्तमान में इसे हटाने कीreturn
Monad
चर्चा चल रही है , इसलिए Monad
रियल वर्ल्ड हास्केल में उदाहरण वास्तव में वास्तविक दुनिया के साथ सिंक से बाहर हो जाएगा।
यह कहा जा रहा है, यह अभी भी सामान्य दिशानिर्देशों के लिए एक उपयोगी संसाधन है। लेकिन ध्यान रखें कि इसके जारी होने के बाद से कई पुस्तकालय बदले गए।
आरडब्ल्यूएच पढ़ते समय कुछ आप साथ में पढ़ सकते हैं "स्टीफन डाइहाल द्वारा" व्हाट आई विश आई नॉट व्हेन लर्निंग हस्कल " । यह अतिरिक्त अंतर्दृष्टि प्रदान करता है, लेकिन जागरूक रहें, कुछ अनुभाग वास्तव में नए अनुकूल नहीं हैं।
सामान्य टिप्पणियाँ
- टिप्पणियाँ पढ़ें। वे आम तौर पर जानकारी रखते हैं कि क्या दिए गए पैराग्राफ / अनुभाग अभी भी प्रासंगिक है और / या काम कर रहे हैं।
- उन पुस्तकालयों / कार्यों का प्रलेखन पढ़ें जिनका आप उपयोग करना चाहते हैं। भले ही आप आलसी हों, कम से कम प्रकार जानें।
अध्यायों के लिए टिप्पणी
यह कुछ चीजों का एक त्वरित अवलोकन है जो मैंने आरडब्ल्यूएच को पढ़ते समय देखा था। यह शायद अधूरा है।
अध्याय 2. एफटीपी के प्रकार और कार्य
चूंकि जीएचसी 7.10 ।
फोल्डेबल-ट्रैवर्सेबल-प्रपोजल के कारण इसके प्रकार null
में बदलाव किया गया है । के रूप में ऐसी कई अन्य कार्यों , और कई अन्य जो पहले केवल के लिए परिभाषित किया गया में अधिक सामान्य के साथ प्रतिस्थापित किया गया है वेरिएंट।foldr
foldl
[a]
Prelude
Foldable t => t a
हास्केल-प्लेटफॉर्म 2010 या 2008 के अंत से।
यद्यपि यह एक फुटनोट में उल्लेख किया गया है , क्विकचेक पुस्तकालय संस्करण 1 से संस्करण 2 तक कई तरीकों से बदल गया है। उदाहरण के लिए, generate
अब Gen a
इसके बजाय का उपयोग करता है StdGen
, और पुराने की कार्यक्षमता generate
में है Test.QuickCheck.Gen.unGen
।
संदेह में, प्रलेखन की जांच करें ।
अध्याय 14. मोनाड्स और अध्याय 15. भिक्षुओं के साथ प्रोग्रामिंग
कोड ब्रेकिंग: Applicative m => Monad m
जीएचसी 7.10 के रूप में, Applicative
अब एक सुपरक्लास है Monad
, जो 2007 में योजनाबद्ध नहीं था।
जीएचसी 7.10 में, Applicative
एक सुपरक्लास बन जाएगा Monad
, जो संभावित रूप से बहुत सारे उपयोगकर्ता कोड को तोड़ देगा। इस परिवर्तन को कम करने के लिए, जीएचसी अब चेतावनियों को उत्पन्न करता है जब परिभाषाओं में आवेदन-मोनाड प्रस्ताव ( एएमपी ) के साथ संघर्ष होता है ।
7.8.1 रिलीज नोट देखें ।
द State
/ Writer
/ Reader
संन्यासी
में विल वास्तविक स्थिति खड़े हो जाओ कृपया इकाई? अनुभाग, लेखक का दावा है
आदेश में एक परिभाषित करने के लिए Monad
उदाहरण के लिए, हम के लिए एक उचित प्रकार निर्माता के साथ-साथ परिभाषाओं प्रदान करने के लिए (>>=)
और return
। यह हमें वास्तविक परिभाषा की ओर ले जाता है State
।
-- file: ch14/State.hs
newtype State s a = State
runState :: s -> (a, s)
}
यह अब सच नहीं है, क्योंकि State
इसके दोस्तों को अब इसके माध्यम से लागू किया जाता है
type State s = StateT s Identity
type Writer w = WriterT w Identity
type Reader r = ReaderT r Identity
इसलिए वे अपने मोनड ट्रांसफार्मर द्वारा परिभाषित किए गए हैं।
समग्र अध्याय ठीक है, लेकिन जैसा कि कोई टिप्पणी में या यूरास शुमोविच के ब्लॉग पर पढ़ सकता है, निम्नलिखित कोड में अंतिम भाग खराब अभ्यास है:
pcre_ptr <- c_pcre_compile pattern (combineOptions flags) errptr erroffset nullPtr
if pcre_ptr == nullPtr
then do
err <- peekCString =<< peek errptr
return (Left err)
else do
reg <- newForeignPtr finalizerFree pcre_ptr -- release with free()
return (Right (Regex reg str))
के रूप में malloc()
उपयोग किया जाना चाहिए free()
, new
साथ delete
, allocate
साथ deallocate
, एक हमेशा सही समारोह का उपयोग करना चाहिए।
टीएल; डीआर आपको हमेशा उसी एलोकेटर के साथ मेमोरी को फ्री करना चाहिए जिसने इसे आपके लिए आवंटित किया है।
यदि कोई विदेशी फ़ंक्शन मेमोरी आवंटित करता है, तो आपको साथ के डीलक्लोलेशन फ़ंक्शन का भी उपयोग करना चाहिए।
त्रुटि हैंडलिंग पूरी तरह से 6.8 से 6.10 में बदल गई, लेकिन आपने देखा कि पहले से ही। बेहतर प्रलेखन पढ़ें ।
कुछ उदाहरण तोड़े जाने लगते हैं। इसके अलावा, अन्य HTTP पुस्तकालय उपलब्ध हैं।
सामान्य रूपरेखा तकनीकें अभी भी समान हैं, और उदाहरण (नीचे देखें) उन समस्याओं के लिए एक महान मामला अध्ययन है जो आपके कार्यक्रम में हो सकते हैं। लेकिन आरडब्ल्यूएच मल्टी-थ्रेडेड प्रोफाइलिंग गायब है, जैसे थ्रेडस्कोप के माध्यम से। इसके अलावा, आलसी IO पूरे पुस्तक में चिंतित नहीं है, जहाँ तक मुझे पता है।
mean :: [Double] -> Double
mean xs = sum xs / fromIntegral (length xs)
अध्याय 24 और अध्याय 28 (समवर्ती और समानांतर प्रोग्रामिंग और एसटीएम)
जबकि अध्याय 24. समवर्ती और मल्टीकोर प्रोग्रामिंग और अध्याय 28। सॉफ्टवेयर लेनदेन स्मृति अभी भी प्रासंगिक हैं, हस्केल में साइमन मार्लो की पुस्तक समानांतर और समवर्ती प्रोग्रामिंग केवल समवर्ती और समानांतर प्रोग्रामिंग पर केंद्रित है और हाल ही में (2013) है। आरडब्ल्यूएच में जीपीयू प्रोग्रामिंग और रेपा पूरी तरह से गायब हैं।
अन्य अध्यायों की तरह, डिज़ाइन लाइब्रेरी के सामान्य दिशानिर्देश अभी भी अच्छी तरह से लिखित और प्रासंगिक हैं। हालाँकि, कुछ परिवर्तनों (?) के विषय में ST
, परिणाम अब संकलित नहीं किए जा सकते हैं।
अध्याय 27. नेटवर्क प्रोग्रामिंग
यह अभी भी ज्यादातर अद्यतित है। आखिरकार, नेटवर्क प्रोग्रामिंग इतनी आसानी से नहीं बदलती है। हालांकि, कोड पदावनत कार्यों का उपयोग करता है bindSocket
और sClose
, जिसे प्रतिस्थापित किया जाना चाहिए bind
और close
(अधिमानतः योग्य आयात के माध्यम से)। ध्यान रखें कि यह बहुत निम्न-स्तर का है, आप अधिक विशिष्ट उच्च-स्तरीय लाइब्रेरी का उपयोग करना चाह सकते हैं।
HHCell प्लेटफॉर्म पेश किए जाने से पहले GHC 6.8 अंतिम संस्करण था। इसलिए, परिशिष्ट आपको हाथ से जीएचसी और काबाल प्राप्त करने के लिए कहता है। मत करो। इसके बजाय, haskell.org डाउनलोड पृष्ठ पर दिए गए निर्देशों का पालन करें ।
इसके अलावा, परिशिष्ट आपको कैबेल सैंडबॉक्स के बारे में नहीं बताता है, जो कि कैबल 1.18 में पेश किए गए थे और आपको निर्भरता नरक से मुक्त करते हैं । और हां, stack
पूरी तरह से गायब है।
छुटे हुए तथ्य
आरडब्ल्यूएच में कुछ विषयों पर चर्चा नहीं की जाती है। इसमें स्ट्रीमिंग लाइब्रेरी जैसे पाइप और नाली , और लेंस भी शामिल हैं ।
उन विषयों के लिए कई संसाधन हैं, लेकिन यहां आपको परिचय के लिए कुछ लिंक दिए गए हैं ताकि आप जान सकें कि वे किस बारे में हैं। इसके अलावा, यदि आप वैक्टर का उपयोग करना चाहते हैं, तो vectors
पैकेज का उपयोग करें ।
Control.Applicative
आरडब्ल्यूएच का उपयोग करता है Control.Applicative
के (<$>)
कई बिंदुओं पर है, लेकिन यह स्पष्ट नहीं करता Control.Applicative
सब पर। LYAH और टाइपक्लासोपेडिया में अनुभाग होते हैं Applicative
। यह देखते हुए कि (ऊपर देखें) Applicative
का एक सुपरक्लास है Monad
, यह उस वर्ग को दिल से सीखने की सिफारिश की जाती है।
इसके अलावा, के कई ऑपरेटरों Control.Applicative
(और typeclass ही) अब का हिस्सा हैं Prelude
, तो सुनिश्चित करें कि आपके ऑपरेटरों के साथ संघर्ष नहीं करना <$>
, <*>
और अन्य।
लेंस
पुस्तकालयों को स्ट्रीम करना
टूलींग
- काबाल का संस्करण 1.18, जिसने सैंडबॉक्स पेश किया
stack
, हास्केल परियोजनाओं के विकास के लिए एक क्रॉस-प्लेटफॉर्म कार्यक्रम
ghc-mod
, vim, emacs, उदात्त पाठ और अन्य संपादकों के लिए एक बैकएंड
नए / अनुपलब्ध भाषा एक्सटेंशन और GHC परिवर्तन
- रनटाइम प्रकार बहुरूपता (
:i ($)
काफी बदल गया है)
-XTypeInType
-XDataKinds
-XGADT
-XRankNTypes
-XGenericNewtypeDeriving
-XDeriveFunctor
- 6.6 के बाद हुआ कोई अन्य विस्तार