আমি অন্যদিন সবেমাত্র হাইওসকেল শেষ করেছি , এবং আমি মনোমোরফিজম সীমাবদ্ধতাটি অনুধাবন করার চেষ্টা করছিলাম, যেমন হাস্কেল উইকির বর্ণিত । আমি মনে করি আমি বুঝতে পারি যে এমআর কীভাবে বারবার মূল্যায়ন রোধ করতে পারে, তবে কেন এই পুনরাবৃত্তি মূল্যায়নগুলি আরও সহজ সরল উপায়ে এড়ানো যায় না তা দেখতে আমি ব্যর্থ হয়েছি।
আমার মনে রাখা সুনির্দিষ্ট উদাহরণটি উইকির দ্বারা ব্যবহৃত:
f xs = (len,len)
where
len = genericLength xs
যেখানে genericLength
টাইপ হয় Num a => [b] -> a
।
স্পষ্টতই, genericLength xs
একবার মূল্যায়নের জন্য একবার গণনা করা দরকার (len,len)
, কারণ এটি একই যুক্তিযুক্ত একই ফাংশন। এবং এটি জানতে আমাদের কোনও অনুরোধ দেখার দরকার নেই f
। সুতরাং কেন এমএসের মতো কোনও নিয়ম চালু না করে হাস্কেল এই অপ্টিমাইজেশনটি করতে পারবেন না?
উইকির পৃষ্ঠায় আলোচিত আলোচনার ফলে আমাকে জানানো হয় যে এটি Num
একটি কংক্রিটের চেয়ে টাইপক্লাসের সত্যিকারের সাথে কিছু করার আছে , তবে তবুও, সংকলন-সময় এটি স্পষ্ট হওয়া উচিত নয় যে খাঁটি ফাংশন একই মানটি ফিরিয়ে দেবে- -আর এইভাবে একই ধরণের কংক্রিটের ধরণ - একই যুক্তি দু'বার দেওয়া হলে?
f [] :: (Int, Float)
। এখন এটি নিখুঁত জ্ঞান করে তোলে। ধন্যবাদ.