এর সুস্পষ্ট ব্যবহারের একটি গুরুত্বপূর্ণ কারণ rec
হিন্ডলি-মিলনার ধরণের অনুক্রমের সাথে করণীয়, যা সমস্ত স্ট্যাটিকভাবে টাইপযুক্ত ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি অন্তর্নিহিত করে (যদিও বিভিন্নভাবে পরিবর্তিত এবং প্রসারিত)।
আপনার যদি সংজ্ঞা থাকে তবে আপনি let f x = x
এটি টাইপ করতে 'a -> 'a
এবং 'a
বিভিন্ন পয়েন্টে বিভিন্ন ধরণের ক্ষেত্রে প্রযোজ্য তা প্রত্যাশা করবেন । তবে সমানভাবে, যদি আপনি লিখেন let g x = (x + 1) + ...
, আপনি আশা x
করবেন int
যে শরীরের বাকি অংশগুলিতে একটি হিসাবে বিবেচিত হবে g
।
এই পার্থক্যের সাথে হিন্দি-মিলনার অনুমানকে যেভাবে ডিল করে তা স্পষ্ট সাধারণীকরণের পদক্ষেপের মাধ্যমে । আপনার প্রোগ্রামটি প্রক্রিয়া করার সময় নির্দিষ্ট পয়েন্টগুলিতে টাইপ সিস্টেমটি থামবে এবং বলে "ঠিক আছে, এই সংজ্ঞাগুলির প্রকারগুলি এই মুহুর্তে সাধারণীকরণ করা হবে, যাতে যখন কেউ তাদের ব্যবহার করে, তাদের ধরণের যে কোনও ফ্রি টাইপের ভেরিয়েবলগুলি তাজা তাত্ক্ষণিকভাবে প্রবর্তিত হবে, এবং এভাবে এই সংজ্ঞাটির অন্য কোনও ব্যবহারে হস্তক্ষেপ করবে না ""
দেখা যাচ্ছে যে এই জেনারালাইজেশন করার বুদ্ধিমান জায়গাটি কার্যকারিতার পারস্পরিক পুনরাবৃত্তির সেটটি পরীক্ষা করার পরে। আগের কোনও, এবং আপনি খুব বেশি সাধারণীকরণ করবেন, যেখানে পরিস্থিতিগুলি ধরণের সংঘর্ষে ডুবে যেতে পারে to যে কোনও পরে, এবং আপনি খুব অল্পই সাধারণীকরণ করবেন, এমন সংজ্ঞা তৈরি করুন যা একাধিক ধরণের তাত্পর্য সহ ব্যবহার করা যায় না।
সুতরাং, প্রদত্ত ধরণের পরীক্ষককে জানতে হবে যে সংজ্ঞাগুলির সেটগুলি পারস্পরিক পুনরাবৃত্তিযোগ্য, এটি কী করতে পারে? একটি সম্ভাবনা হ'ল কোনও সুযোগের সমস্ত সংজ্ঞাগুলির উপর নির্ভরশীলতা বিশ্লেষণ করা এবং এগুলি সর্বনিম্নতম গ্রুপে পুনর্বিন্যাস করা। হাস্কেল আসলে এটি করে, তবে এফ # (এবং ওসিএএমএল এবং এসএমএল) এর মতো ভাষাগুলিতে যার সীমাহীন পার্শ্ব-প্রতিক্রিয়া রয়েছে, এটি একটি খারাপ ধারণা কারণ এটি পার্শ্ব-প্রতিক্রিয়াগুলিকেও পুনরায় অর্ডার করতে পারে। সুতরাং পরিবর্তে এটি ব্যবহারকারীকে স্পষ্ট করে চিহ্নিত করতে পারে যে কোন সংজ্ঞাগুলি পারস্পরিক পুনরাবৃত্তিযোগ্য এবং এভাবে এক্সটেনশন দ্বারা যেখানে সাধারণীকরণ হওয়া উচিত।