যেহেতু অন্য কেউ এই প্রশ্নের উত্তর দেয়নি, আমি মনে করি আমি নিজেই এটি দিয়ে যাব। আমি কিছুটা দার্শনিক পেতে যাচ্ছি।
জেনেরিক প্রোগ্রামিং হ'ল টাইপ তথ্য না হারাতে (একইভাবে বস্তু-ভিত্তিক মান পলিমারফিজমের সাথে যা ঘটে) একই জাতীয় ধরণের বিস্মৃতকরণ সম্পর্কে। এটি করার জন্য, প্রকারগুলি অবশ্যই ব্যবহার করতে পারেন এমন কিছু প্রকারের ইন্টারফেস (অপারেশনগুলির একটি সেট, ওও শব্দটি নয়) ভাগ করে নিতে হবে।
অবজেক্ট-ওরিয়েন্টেড ভাষায়, প্রকার শ্রেণীর গুণাবলী দ্বারা ইন্টারফেসকে সন্তুষ্ট করে। প্রতিটি শ্রেণীর নিজস্ব ইন্টারফেস থাকে, এটির ধরণের অংশ হিসাবে সংজ্ঞায়িত হয়। যেহেতু সমস্ত শ্রেণি List<T>
একই ইন্টারফেস ভাগ করে, তাই আপনি এমন কোড লিখতে পারেন যা T
আপনি চয়ন না করে কার্যকর হয়। ইন্টারফেস চাপানোর আরেকটি উপায় হ'ল উত্তরাধিকারের সীমাবদ্ধতা এবং যদিও দুটি ভিন্ন বলে মনে হয় তবে আপনি যদি এটির বিষয়ে চিন্তা করেন তবে সেগুলি এক রকম।
বেশিরভাগ অবজেক্ট-ওরিয়েন্টেড ভাষায়, List<>
এটি নিজের মধ্যে সঠিক ধরণের নয়। এটির কোনও পদ্ধতি নেই এবং এর ফলে কোনও ইন্টারফেস নেই। শুধুমাত্র List<T>
এই জিনিস আছে। মূলত, আরও প্রযুক্তিগত ভাষায়, কেবলমাত্র ধরণের ধরণের সাথেই আপনি অর্থপূর্ণভাবে বিমূর্ত করতে পারেন *
। কোনও বস্তু-ভিত্তিক বিশ্বে উচ্চ-ধরণের ধরণের ব্যবহার করতে, আপনাকে এই বিধিনিষেধের সাথে সামঞ্জস্যপূর্ণ পদ্ধতিতে টাইপ সীমাবদ্ধতার বাক্যাংশ দিতে হবে।
উদাহরণ হিসেবে বলা যায়, মন্তব্য উল্লেখ হিসাবে, আমরা দেখতে পারেন Option<>
এবং List<>
হিসাবে "mappable হয়", অর্থে আপনি একটি ফাংশন আছে, আপনি একটি রূপান্তর করতে পারে যে Option<T>
একটি মধ্যে Option<S>
, অথবা একটি List<T>
একটি মধ্যে List<S>
। ক্লাসগুলি উচ্চতর ধরণের ধরণের জন্য সরাসরি বিমূর্ত করতে ব্যবহার করা যাবে না মনে করে, আমরা পরিবর্তে একটি ইন্টারফেস করি:
IMappable<K<_>, T> where K<T> : IMappable<K<_>, T>
এবং তারপর আমরা উভয় ইন্টারফেস বাস্তবায়ন List<T>
এবং Option<T>
যেমন IMappable<List<_>, T>
এবং IMappable<Option<_>, T>
যথাক্রমে। আমরা কি কাজ করেছি, প্রকৃত (অ-উচ্চ kinded) ধরনের জায়গা সীমাবদ্ধতার উচ্চ kinded ধরনের ব্যবহার করছে Option<T>
এবং List<T>
। এটি স্ক্যালায় এটিই করা হয়, যদিও অবশ্যই স্কালায় বৈশিষ্ট্য, টাইপ ভেরিয়েবল এবং অন্তর্নিহিত পরামিতিগুলির মতো বৈশিষ্ট্য রয়েছে যা এটিকে আরও স্পষ্ট করে তোলে।
অন্যান্য ভাষায়, সরাসরি উচ্চ ধরণের ধরণের উপর বিমূর্ত করা সম্ভব। টাইপ সিস্টেমে অন্যতম সর্বোচ্চ কর্তৃপক্ষ হাস্কেল-তে, আমরা কোনও ধরণের জন্য উচ্চ শ্রেণীর, এমনকি কোনও প্রকারের জন্য একটি টাইপ শ্রেণীর শব্দটি বলতে পারি। উদাহরণ স্বরূপ,
class Mappable mp where
map :: mp a -> mp b
এই বাধ্যতা একটি (অনির্দিষ্ট) ধরনের উপর সরাসরি স্থাপন করা হয় mp
, যা এক ধরনের প্যারামিটার নেয় এবং ফাংশন সঙ্গে যুক্ত করা প্রয়োজন map
যে একটি সক্রিয় mp<a>
একটি মধ্যে mp<b>
। তারপরে আমরা এমন ফাংশন লিখতে পারি যা উচ্চ-ধরণের প্রকারকে বাধা দেয় Mappable
ঠিক যেমন অবজেক্ট-ওরিয়েন্টেড ভাষায় আপনি কোনও উত্তরাধিকারের সীমাবদ্ধ রাখতে পারেন। ভাল ধরণের.
বিষয়গুলি সংক্ষেপে, উচ্চ-ধরণের ধরণের ব্যবহারের আপনার দক্ষতা এগুলিকে সীমাবদ্ধ করার ক্ষমতা বা টাইপ সীমাবদ্ধতার অংশ হিসাবে তাদের ব্যবহারের দক্ষতার উপর নির্ভর করে।