এগুলি কেন সমতুল্য নয়?
show $ if someCondition then someInt else some double
এবং
if someCondition then show someInt else show someDouble
আমি বুঝতে পারি যে আপনি যদি if ... elseপ্রথম উদাহরণের অংশটি নিজেই একটি অভিব্যক্তিতে বিচ্ছিন্ন করে থাকেন তবে আপনি Int | Doubleটাইপস্ক্রিপ্টে সহজেই কিছু করতে পারেন এমন কোনও ধরণের, বেনামে যোগফলের ধরণের সাথে এর ধরণের প্রতিনিধিত্ব করতে পারবেন না (টাইপস্ক্রিপ্ট উল্লেখ করে কারণ এটি আমি প্রায়শই ব্যবহার করি এবং এটি সামমের ধরণেরগুলিকে সমর্থন করে) ল্যাঙ্গেজ, এবং তার Eitherউপর ভিত্তি করে কল করার পরে ডেটা ব্যবহার করতে হবে show।
আমি এখানে যে উদাহরণটি দিয়েছি তা তুচ্ছ, তবে আমার কাছে এটি মনে করা আরও someConditionঅর্থবোধ করে যে "ঠিক আছে আমরা কিছু দেখাতে যাচ্ছি, " যে " কিছু ঠিক আছে যদি কিছু সত্য হয় তবে কিছুটা দেখান অন্যথায় কিছুটা ডাবল" প্রদর্শন করুন, এবং এটিও অনুমতি দেয় কম কোড সদৃশতার জন্য (এখানে শোটি পুনরায় পুনরাবৃত্তি করা হয়েছে তবে এটি একটি দীর্ঘ ফাংশন অ্যাপ্লিকেশন if ... elseহতে পারে এবং এর পরিবর্তে>> 2 টি শাখা বিবেচনা করা যেতে পারে)
আমার মনে মনে সংকলকটির জন্য এটি পরীক্ষা করা সহজ হওয়া উচিত যে যোগফলের ধরণ তৈরি করে এমন প্রতিটি ধরণের (এখানে Int | Double) showকার্যকারিতা হিসাবে প্যারামিটার হিসাবে ব্যবহার করা যেতে পারে এবং প্রকারগুলি সঠিক কিনা তা স্থির করে কিনা check আরও ভাল এটি যে showফাংশনটি সর্বদা stringপ্যারামিটারগুলির প্রকারের কোনও কারণই ফেরত দেয় না, তাই সংকলকটি এটির সাথে সমস্ত সম্ভাব্য "শাখা" বহন করে না (সুতরাং সমস্ত সম্ভাব্য প্রকারগুলি)।
এটি কি পছন্দ করে এমন বৈশিষ্ট্যটির অস্তিত্ব নেই? বা আমার মনে হয় যে এটি আরো কার্যকর করা হয়?
making all conversions explicit। আমার প্রশ্নে, আমি চাই না যে হাস্কেল Intএকটি Doubleবা তার বিপরীতে একটি .ালাই। আমি কেবল উদাহরণ হিসাবে এই দুটি ধরণের ব্যবহার করেছি। আপনি প্রতিটি প্রতিস্থাপন করতে পারে Intসঙ্গে aএবং Doubleসঙ্গে bআমার প্রশ্ন যেখানে উভয় প্রকারের আহরণ মধ্যে Show। আমি বুঝতে পেরেছি যে anonymous sum typesহাস্কেলের মধ্যে কোনও নেই তবে আমি জানতে চাই যে এটি কেন এবং ভাষাটি এটির ডিজাইন করতে আমাদের কীভাবে বাধা দিচ্ছে।
x :: Int | Boolএবং আমাদের সংকলন করতে হয় show x, তবে showটাইপ-ইরেজর ভিত্তিক আরটিএসে কল করার জন্য কোন পয়েন্টার-টু ফাংশনটি ব্যবহার করা হবে তা জানার সহজ উপায় নেই । আমাদের সম্ভবত রানটাইমের সময় কিছু ধরণের স্তরের তথ্য রাখা দরকার।
(String, Int)বেনামে নয়। এটি মজাদার সিনট্যাক্স সহ কেবল একটি নিয়মিত পণ্যের ধরণ। (String | Int)সম্পূর্ণ ভিন্ন হবে। নিজেকে জিজ্ঞাসা করে শুরু করুন যে (Int|Int)একইরকম Intএবং কেন হওয়া উচিত ।
if ... then ... else ..., এ একই ধরনের প্রয়োজন আছেthenএবংelseঅংশ। আপনি কিছু প্রোগ্রামিং ভাষায় এটি টের্নারি অপারেটর হিসাবে দেখতে পারেন।