আরডাব্লুএইচ প্রধান বিষয়
এটা পুরানো. আরডাব্লুএইচ লেখা হয়েছিল জিএইচসি-র 6.8 সংস্করণে ব্যবহৃত হয়েছিল। 6.8 ব্যবহৃত বেস সংস্করণ 3.0.xx 6.10.1 ইতিমধ্যে ব্যবহৃত 4.0.0.0 ব্যবহার করেছে, যা অনেক পরিবর্তন প্রবর্তন করেছে । এবং এটি কেবল 6.8 থেকে 6.10 এ লাফিয়ে। জিএইচসির বর্তমান সংস্করণটি 7.10 is মনদেবগুলি পরিবর্তন করা হয়েছে। বর্তমানে একটি আলোচনা আছে মুছে ফেলার জন্য return
থেকেMonad
, তাই Monad
রিয়াল পৃথিবী মধ্যে Haskell উদাহরণস্বরূপ সত্যিই বাস্তব জগতে র সাথে সিঙ্কের বাইরে থাকবে।
বলা হচ্ছে, এটি এখনও সাধারণ নির্দেশিকাগুলির জন্য একটি দরকারী সংস্থান। তবে মনে রাখবেন যে প্রকাশের পরে অনেকগুলি গ্রন্থাগার পরিবর্তিত হয়েছে।
আরডাব্লুএইচ পড়ার সময় আপনি যা কিছু পড়তে পারেন তা হ'ল স্টিফেন ডেইহেলের লেখা "হোয়াট আই উইশ আই নু উইল লার্নিং হাস্কেল" । এটি অতিরিক্ত অন্তর্দৃষ্টি সরবরাহ করে, তবে সচেতন থাকুন, কিছু বিভাগ সত্যই নতুন আগত বান্ধব নয়।
সাধারণ মন্তব্য
- মন্তব্য পড়ুন। প্রদত্ত অনুচ্ছেদ / বিভাগটি এখনও প্রাসঙ্গিক এবং / অথবা কার্যকরী কিনা তা তাদের মধ্যে সাধারণত তথ্য থাকে।
- আপনি যে লাইব্রেরি / ফাংশনগুলি ব্যবহার করতে চান তার ডকুমেন্টেশন পড়ুন। এমনকি আপনি অলস হলেও কমপক্ষে প্রকারগুলি জেনে নিন know
অধ্যায়গুলিতে মন্তব্য
এটি আরডাব্লুএইচ পড়ার সময় আমি যে কয়েকটি বিষয় লক্ষ্য করেছি তার কেবলমাত্র একটি দ্রুত পর্যালোচনা। এটা সম্ভবত অসম্পূর্ণ।
অধ্যায় 2. এফটিপি বনাম প্রকার ও কার্যাদি
জিএইচসি 7.10 থেকে ।
ভাঁজযোগ্য-ট্র্যাভারেবল-প্রস্তাবের কারণে প্রকারটি পরিবর্তনnull
করা হয়েছে । যেমন অন্য অনেক ফাংশন , এবং অনেক অন্যান্য যা পূর্বে শুধুমাত্র জন্য সংজ্ঞায়িত করা হয়েছে এ আরও সাধারণ দিয়ে প্রতিস্থাপিত করা হয়েছে রূপগুলো।foldr
foldl
[a]
Prelude
Foldable t => t a
হাসেল-প্ল্যাটফর্ম ২০১০ বা ২০০৮ এর শেষের দিক থেকে।
যদিও এটি একটি পাদটীকাতে উল্লেখ করা হয়েছে , ততক্ষণে কুইকচেক পাঠাগারটি সংস্করণ 1 থেকে 2 সংস্করণে পরিবর্তিত হয়েছে For উদাহরণস্বরূপ, generate
এখন Gen a
পরিবর্তে এটি ব্যবহার করে StdGen
এবং পুরানো কার্যকারিতাটি generate
ভিতরে রয়েছে Test.QuickCheck.Gen.unGen
।
সন্দেহের সাথে ডকুমেন্টেশন চেক করুন ।
অধ্যায় 14. মনডস এবং অধ্যায় 15. স্নাতকের সাথে প্রোগ্রামিং
কোড ভঙ্গ: Applicative m => Monad m
জিএইচসি 10.১০ এর হিসাবে Applicative
এটি এখন একটি সুপার ক্লাস, এটি Monad
এমন কিছু যা 2007 সালে পরিকল্পনা করা হয়নি।
জিএইচসি 7.10 Applicative
-তে Monad
, সম্ভবত একটি প্রচুর ব্যবহারকারীর কোড ভঙ্গ করে একটি সুপার ক্লাসে পরিণত হবে । এই রূপান্তরটি সহজ করতে, প্রয়োগকারী-মোনাড প্রস্তাব ( এএমপি ) এর সংজ্ঞা সংঘর্ষে জেএইচসি এখন সতর্কতা তৈরি করে ।
দেখুন 7.8.1 রিলিজ নোট ।
State
/ Writer
/ Reader
Monads
ইন উইল বাস্তব রাষ্ট্র দাঁড়ানো দয়া একসংখ্যা? বিভাগ, লেখকদের দাবি
একটি 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
সুতরাং তারা তাদের monad ট্রান্সফরমার দ্বারা সংজ্ঞায়িত করা হয়।
সামগ্রিক অধ্যায়টি ভাল, তবে কেউ মন্তব্যগুলিতে বা ইউরাস শুমোভিচের ব্লগে যেমন পড়তে পারেন , নিম্নলিখিত কোডের চূড়ান্তকরণটি খারাপ অভ্যাস:
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 থেকে সম্পূর্ণরূপে পরিবর্তিত হয়েছে তবে আপনি লক্ষ্য করেছেন যে এরই মধ্যে। ডকুমেন্টেশন পড়া ভাল ।
এর কয়েকটি উদাহরণ ভেঙে গেছে বলে মনে হচ্ছে। এছাড়াও, অন্যান্য এইচটিটিপি লাইব্রেরি উপলব্ধ।
সাধারণ প্রোফাইলিং কৌশলগুলি এখনও একইরকম এবং উদাহরণ (নীচে দেখুন) আপনার প্রোগ্রামে দেখা দিতে পারে এমন সমস্যাগুলির জন্য দুর্দান্ত কেস স্টাডি। তবে আরডাব্লুএইচ মাল্টি-থ্রেডযুক্ত প্রোফাইল অনুপস্থিত, যেমন থ্রেডস্কোপের মাধ্যমে। এছাড়াও, অলস আইও পুরো বই জুড়েই উদ্বিগ্ন নয়, যতদূর আমি জানি।
mean :: [Double] -> Double
mean xs = sum xs / fromIntegral (length xs)
অধ্যায় 24 এবং অধ্যায় 28 (সমবর্তী এবং সমান্তরাল প্রোগ্রামিং এবং এসটিএম)
যদিও অধ্যায় 24. সমসাময়িক এবং মাল্টিকোর প্রোগ্রামিং এবং অধ্যায় 28. সফটওয়্যার লেনদেনের মেমরির এখনো প্রাসঙ্গিক, সাইমন মধ্যে Marlow এর বই সমান্তরাল এবং Haskell মধ্যে কংকারেন্ট প্রোগ্রামিং সমবর্তী এবং সমান্তরাল প্রোগ্রামিং এর উপর একমাত্র দৃষ্টি নিবদ্ধ করে এবং সুন্দর সাম্প্রতিক হয় (2013)। আরডাব্লুএইচ-তে জিপিইউ প্রোগ্রামিং এবং রেপা সম্পূর্ণ অনুপস্থিত।
অন্যান্য অধ্যায়গুলির মতো, নকশা গ্রন্থাগারের সাধারণ দিকনির্দেশগুলি এখনও ভালভাবে লিখিত এবং প্রাসঙ্গিক। তবে কিছু পরিবর্তন (?) এর কারণে ST
ফলাফল আর সংকলন করা যায় না।
অধ্যায় 27. নেটওয়ার্ক প্রোগ্রামিং
এটি এখনও বেশিরভাগ আপ টু ডেট। সর্বোপরি, নেটওয়ার্ক প্রোগ্রামিং এত সহজে পরিবর্তন হয় না। যাইহোক, কোডটি অবহিত ফাংশনগুলি ব্যবহার করে bindSocket
এবং sClose
, যা দ্বারা bind
এবং close
(পছন্দসই যোগ্য আমদানির মাধ্যমে) প্রতিস্থাপন করা উচিত । মনে রাখবেন এটি খুব নিম্ন-স্তরের, আপনি আরও বেশি বিশেষায়িত উচ্চ-স্তরের গ্রন্থাগারটি ব্যবহার করতে চাইতে পারেন।
হাসেল প্ল্যাটফর্মটি চালু হওয়ার আগে জিএইচসি 6.8 সর্বশেষ সংস্করণ ছিল। অতএব, পরিশিষ্টটি আপনাকে জিএইচসি এবং ক্যাবল হাতে পেতে বলে tells না। পরিবর্তে, haskell.org ডাউনলোড পৃষ্ঠায় দেওয়া নির্দেশাবলী অনুসরণ করুন ।
এছাড়াও, পরিশিষ্টটি আপনাকে ক্যাবল স্যান্ডবক্সগুলি সম্পর্কে জানায় না, যা ক্যাবল ১.১৮ এ প্রবর্তিত হয়েছিল এবং আপনাকে নির্ভরতা নরক থেকে মুক্তি দেয় । এবং অবশ্যই, stack
পুরোপুরি অনুপস্থিত।
অনুপস্থিত বিষয়বস্তু
কিছু বিষয় আরডব্লুএইচ তে মোটেও আলোচিত হয় না। এর মধ্যে পাইপ এবং কন্ডউইটের মতো স্ট্রিমিং লাইব্রেরি এবং লেন্সও অন্তর্ভুক্ত রয়েছে ।
এই বিষয়গুলির জন্য এখানে বেশ কয়েকটি সংস্থান রয়েছে, তবে সেগুলি কী সে সম্পর্কে আপনাকে ধারণা দেওয়ার জন্য এখানে পরিচয়ের কয়েকটি লিঙ্ক রয়েছে। এছাড়াও, আপনি যদি ভেক্টর ব্যবহার করতে চান তবে vectors
প্যাকেজটি ব্যবহার করুন ।
Control.Applicative
আরডাব্লুএইচ বিভিন্ন পয়েন্টে Control.Applicative
এর ব্যবহার (<$>)
করে, তবে মোটেও ব্যাখ্যা দেয় না Control.Applicative
। LYAH এবং Typeclassopedia উপর বিভাগে ধারণ Applicative
। প্রদত্ত যে Applicative
একটি সুপারক্লাস হয় Monad
(উপরে দেখুন), এটা হৃদয় দ্বারা যে বর্গ শিখতে পরামর্শ দেওয়া হচ্ছে।
অধিকন্তু, বিভিন্ন অপারেটার Control.Applicative
(এবং typeclass নিজেই) এখন অংশ Prelude
, তাই নিশ্চিত করুন যে আপনার অপারেটরদের সঙ্গে সংঘর্ষ না তা নিশ্চিত করুন <$>
, <*>
এবং অন্যদের।
লেন্সসমূহ
স্ট্রিমিং লাইব্রেরি
সাধনী দ্বারা প্রয়োগকরণ
- ক্যাবলের 1.18 সংস্করণ, যা স্যান্ডবক্সগুলি প্রবর্তন করেছিল
stack
, হাস্কেল প্রকল্পগুলির উন্নয়নের জন্য একটি ক্রস প্ল্যাটফর্ম প্রোগ্রাম
ghc-mod
, ভিএম, ইমাস, সাব্লাইম টেক্সট এবং অন্যান্য সম্পাদকদের জন্য একটি ব্যাকএন্ড
নতুন / হারিয়ে যাওয়া ভাষার এক্সটেনশান এবং জিএইচসি পরিবর্তন
- রানটাইম টাইপ পলিমারফিজম (
:i ($)
দুর্দান্ত পরিবর্তন হয়েছে)
-XTypeInType
-XDataKinds
-XGADT
-XRankNTypes
-XGenericNewtypeDeriving
-XDeriveFunctor
- extension. after এর পরে ঘটে যাওয়া অন্য কোনও এক্সটেনশন