এগুলি কেন সমতুল্য নয়?
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
অংশ। আপনি কিছু প্রোগ্রামিং ভাষায় এটি টের্নারি অপারেটর হিসাবে দেখতে পারেন।