সাম্প্রতিককালে আমি মনডস কীভাবে কাজ করে তা সম্পর্কে আমার জ্ঞানকে ধরিয়ে দিচ্ছি। আমি একটি 'কমোনাদ' ধারণার সাথেও পরিচয় করিয়েছি , যা একটি মোনাডের বিপরীত দ্বৈত হিসাবে বর্ণনা করা হয়েছে । যাইহোক, আমি এটি প্রায় আমার মাথা মোড়ানো অসম্ভব।
মনাদাদের বোঝার জন্য, আমি নিজের জন্য নিজস্ব উপমা তৈরি করেছি:
মনাদাদের 'এক্সপ্রেশনগুলির পরিবাহক বেল্ট তৈরির একটি নীলনকশা' হিসাবে দেখা যেতে পারে।
একটি নতুন মোনাডকে সংজ্ঞায়িত করতে (নতুন ধরণের কনভেয়র-বেল্ট সিস্টেম) আপনাকে সংজ্ঞা দিতে হবে:
- একটি পরিবাহক বেল্টে কিছু রাখার একটি উপায়, যেমন একটি পরিবাহক বেল্ট 'শুরু করুন'। (হিসাবে পরিচিত
unit
বাreturn
)- কোনও মেশিনকে সংযুক্ত করার একটি উপায় (একটি অভিব্যক্তি) যা একটি পরিবাহী বেল্টের একটি পরিবাহক বেল্টের অংশ হবে। (নামে পরিচিত
join
বাbind
বা>>=
)।(একটি তৃতীয় অপারেশন রয়েছে যা বর্তমান পরিবাহক বেল্ট নিয়ে যায়, এর সামগ্রীগুলি দূরে ফেলে দেয় এবং নতুন কনভেয়র বেল্ট হিসাবে পরিচিত হয়
>>
, তবে এটি খুব কম ব্যবহৃত হয়))মেশিন এবং পরিবাহকরা একসাথে সঠিকভাবে কাজ করার জন্য, আপনাকে নিশ্চিত করতে হবে:
- আপনি যদি কোনও বাহক বেল্টে কিছু রেখে এবং এটি কোনও মেশিনের মাধ্যমে পাস করেন তবে আউটপুটটি মেশিনের মাধ্যমে ম্যানুয়ালি পাস করার সময় একই হওয়া উচিত। (বাম পরিচয়)
- আপনি যদি ইতিমধ্যে বিদ্যমান কনভেয়র বেল্টের মধ্যে একটি কনভেয়র-বেল্ট রাখতে চান, তবে আপনার একটি পরিবাহক বেল্টটি শেষ হবে না যার উপরে একটি পরিবাহক বেল্ট রয়েছে, বরং একটি একক, দীর্ঘতর পরিবাহক বেল্ট। (সঠিক পরিচয়)
- আপনি যদি ম্যানুয়ালি মেশিন এ ব্যবহার করেন, এবং তারপরে কনভেয়র-সংযুক্ত বিসি-এর মাধ্যমে ফলাফলটি পাস করেন, বা আপনি যদি কনভেয়র-সংযুক্ত এবি ব্যবহার করেন এবং ফলস্বরূপ সি'র মাধ্যমে ম্যানুয়ালি পাস করেন তবে আউটপুটটির জন্য এটি বিবেচনা করা উচিত নয়: ((a >> = খ) >> = গ) (a >> = (খ >> = সি)) (সমিতি) এর মতো হওয়া উচিত
সর্বাধিক সাধারণ পরিবাহক-বেল্টটি এমনটি হবে যা কেবল ইনপুট নেয় এবং সর্বদা পরবর্তী অভিব্যক্তিতে অবিরত থাকে। এটিই 'পাইপলাইন'।
আর একটি সম্ভাবনা হ'ল যদি এটির পরবর্তী মেশিনটির মাধ্যমে কিছু শর্তটি মানটির জন্য পূরণ করা হয়। এর অর্থ হ'ল যদি এর মধ্যে কিছু ভাবের মধ্যে, মানটি এমন কিছুতে পরিবর্তিত হয় যা আর অনুমোদিত হয় না, তবে বাকী বাক্সগুলি ছেড়ে দেওয়া হবে। 'সম্ভবত' মনাদ হ্যাসকেলে এটি করে।
আপনি কোনও যন্ত্রে পাস করার আগে বা পরে মানগুলিতে অন্যান্য অভিনব শর্তসাপেক্ষ অনুলিপি / পরিবর্তন নিয়মগুলিও করতে পারেন। উদাহরণ: পার্সার্স (এখানে, যদি কোনও অভিব্যক্তি একটি 'ব্যর্থতা' ফলাফল প্রদান করে, এক্সপ্রেশনটি আউটপুট হিসাবে ব্যবহৃত হওয়ার আগে থেকে প্রাপ্ত মান )।
অবশ্যই উপমাটি নিখুঁত নয়, তবে আমি আশা করি এটি কীভাবে মনডসের কাজ করে তার একটি যথাযথ উপস্থাপনা দেয়।
যাইহোক, কমোনাদস বোঝার জন্য এই উপমাটি তার মাথায় ঘুরিয়ে দিতে আমার অনেক সমস্যা হচ্ছে। একটি কমোনাড সংজ্ঞায়িত ইন্টারনেটে আমি যে পরিমাণ অল্প পরিমাণে তথ্য পেয়েছি তা থেকে আমি জানি:
extract
, যা বিপরীত ধরণেরreturn
, এটি একটি কমোনাদ থেকে একটি মান লাগে ।duplicate
, যা বিপরীত প্রকারের সাজানjoin
, এটি একটি এক থেকে দুটি কমোনাদ তৈরি করে।
তবে কীভাবে কোনও কমোনাদকে তাত্ক্ষণিকভাবে ব্যবহার করা যেতে পারে যদি আমরা কেবল সেগুলি থেকে নিষ্কাশন করতে বা সেগুলি নকল করতে পারি? এবং এগুলি আসলে কীভাবে ব্যবহার করা যায়? আমি এই খুব আশ্চর্যজনক প্রকল্প এবং এটি সম্পর্কে আলাপটি দেখেছি (যা দুর্ভাগ্যক্রমে আমি খুব কমই বুঝতে পেরেছিলাম), তবে আমি নিশ্চিত নই যে কার্যক্ষমতার কোন অংশটি কোনও কমোনাদ দ্বারা সরবরাহ করেছে provided
কমোনাদ কী? তারা কি জন্য দরকারী? সেগুলি কীভাবে ব্যবহার করা যায়? এগুলি কি ভোজ্য?
IO
মনাদ সম্পর্কে কথা বলার সময় সেই উপমাগুলি খুঁজে পাই না) হ্যাস্কেল রানটাইম সিস্টেম, যা অনুরোধ করে main
। এর রয়েছে unsafePerformIO
অবশ্যই। আপনি যদি Maybe
"কনভেয়র বেল্টের শেষে মেশিন" ব্যবহার করে মোনাডকে ভাবতে চান তবে আপনি ব্যবহার করতে পারেন maybe
।
cobind
অ্যাপ্লিকেশনগুলির একটি শৃঙ্খলের শুরুতে একটি কমোনাদিক মান তৈরি করতে চান , তখন অবশ্যই কিছু ফাংশন থাকতে হবে যা আপনার কমোনাদের অভ্যন্তরীণ উপস্থাপনের জন্য দরকারী কিছু করে।