গোয়ের ধরণের অনুমিতি সম্পর্কিত এই স্ট্যাকওভারফ্লো উত্তরটি দেখুন । আমি গো সাথে পরিচিত নই তবে এই উত্তরের উপর ভিত্তি করে মনে হচ্ছে এটি একমুখী "টাইপ ছাড়" (কিছু সি ++ টেমিনোলজি ধার করা)। এর অর্থ হ'ল যদি আপনার:
x := y + z
তারপরে ধরণের প্রকারটি x
বের করে নির্ধারণ করা হয় যা সংকলকটির y + z
জন্য অপেক্ষাকৃত তুচ্ছ জিনিস। এটি করার জন্য, প্রকারগুলির প্রকারগুলি y
এবং পূর্বরূপগুলিz
জানা দরকার : এটি টাইপ টিকাশির মাধ্যমে করা যেতে পারে বা তাদের অর্পণ করা আক্ষরিক থেকে অনুমান করা যায়।
বিপরীতে, বেশিরভাগ কার্যকরী ভাষাগুলির মধ্যে টাইপের অনুমিতি থাকে যা ভেরিয়েবলের ধরণটি আবিষ্কার করতে মডিউল (বা ফাংশন, যদি ইনফারেন্স অ্যালগরিদম স্থানীয় হয়) এর মধ্যে সমস্ত সম্ভাব্য তথ্য ব্যবহার করে। জটিল ইনফারেন্স অ্যালগরিদম (যেমন হিন্দি-মিলনার) প্রায়শই পর্দার আড়ালে কিছু প্রকারের একীকরণের (সমীকরণ সমাধানের মতো ) জড়িত । উদাহরণস্বরূপ, হাসকেলে, আপনি যদি লিখেন:
let x = y + z
তারপরে হাস্কেল প্রকারটি কেবলমাত্র x
নয় কেবল y
এবং z
কেবল তাদের ভিত্তিতে আপনি অতিরিক্ত সম্পাদন করছেন তার উপর ভিত্তি করে অনুমান করতে পারে । এক্ষেত্রে:
x :: Num a => a
y :: Num a => a
z :: Num a => a
(ছোট হাতের a
এখানে একটি উল্লেখ করে বহুরুপী টাইপ প্রায়ই বলা হয় "জেনেরিক্স" সি মত অন্যান্য ভাষায় ++,। Num a =>
অংশ হল বাধ্যতা নির্দেশ করে টাইপ a
সমর্থন উপরন্তু কিছু ধারণা আছে।)
এখানে আরও আকর্ষণীয় উদাহরণ: নির্দিষ্ট পয়েন্ট সংযোজক যা কোনও পুনরাবৃত্ত ফাংশন সংজ্ঞায়িত করতে দেয়:
let fix f = f (fix f)
লক্ষ্য করুন যে কোথাও আমরা প্রকারটি নির্দিষ্ট করে নেই f
, বা আমরা প্রকারটি নির্দিষ্ট করে নেই fix
, তবুও হাস্কেল সংকলক স্বয়ংক্রিয়ভাবে এটি বের করতে পারে:
f :: t -> t
fix :: (t -> t) -> t
এটি বলে যে:
- প্যারামিটারটি
f
কিছু স্বেচ্ছাসেবী টাইপ t
থেকে একই ধরণের হতে হবে t
।
fix
এটি এমন একটি ফাংশন যা টাইপের একটি পরামিতি গ্রহণ করে t -> t
এবং টাইপের ফলাফল প্রদান করে t
।
x
,y
,z
একইNum
, এরিক টাইপ কিন্তু এখনও তারা হতে পারেInteger
S,Double
S,Ratio Integer
s ... Haskell, সাংখ্যিক ধরনের মধ্যে একটি অবাধ পছন্দ করতে ইচ্ছুক, কিন্তু অন্যান্য typeclasses জন্য নয়।