হাস্কেলের মধ্যে "জাস্ট" সিনট্যাক্সের অর্থ কী?


118

এই কীওয়ার্ডটি কী করে তার প্রকৃত ব্যাখ্যার জন্য আমি ইন্টারনেটকে ছড়িয়ে দিয়েছি। প্রতিটি হাস্কেলের টিউটোরিয়াল যা আমি দেখেছি তা এলোমেলোভাবে ব্যবহার করা শুরু করে এবং এটি কী করে তা কখনই ব্যাখ্যা করে না (এবং আমি অনেকের দিকে তাকিয়েছি)।

এখানে রিয়েল ওয়ার্ল্ড হাস্কেল থেকে কোডের একটি প্রাথমিক অংশ রয়েছে যা ব্যবহার করে Just। কোডটি কী করে তা আমি বুঝতে পারি তবে এর উদ্দেশ্য বা কার্য কী তা আমি বুঝতে পারি না Just

lend amount balance = let reserve    = 100
                      newBalance = balance - amount
                  in if balance < reserve
                     then Nothing
                     else Just newBalance

আমি যা লক্ষ্য করেছি তা থেকে এটি Maybeটাইপিংয়ের সাথে সম্পর্কিত , তবে এটি আমি শিখতে পেরেছি।

এর Justঅর্থের একটি ভাল ব্যাখ্যা খুব প্রশংসা হবে।

উত্তর:


211

এটি প্রকৃতপক্ষে কেবলমাত্র একটি সাধারণ ডেটা কনস্ট্রাক্টর যা প্রিলিউডে সংজ্ঞায়িত করা হয় , এটি স্ট্যান্ডার্ড লাইব্রেরি যা প্রতিটি মডিউলে স্বয়ংক্রিয়ভাবে আমদানি করা হয়।

কি হতে পারে, কাঠামোগত

সংজ্ঞাটি এরকম কিছু দেখায়:

data Maybe a = Just a
             | Nothing

ঘোষণা একটি টাইপ, সংজ্ঞায়িত Maybe a, যা একটি টাইপ পরিবর্তনশীল দ্বারা স্থিতিমাপ হয় a, যার মানে আপনি স্থানে কোনো ধরনের সঙ্গে এটি ব্যবহার করতে পারেন a

নির্মাণ এবং ধ্বংস

ধরণের দুটি কনস্ট্রাক্টর রয়েছে Just aএবং Nothing। যখন কোনও ধরণের একাধিক কনস্ট্রাক্টর থাকে, এর অর্থ হ'ল এই ধরণের মান অবশ্যই সম্ভাব্য নির্মাতাদের মধ্যে একটির সাথে তৈরি করা উচিত। এই ধরণের জন্য, একটি মান হয় হয় মাধ্যমে নির্মিত হয়েছিল Justবা Nothing, অন্য কোনও (ত্রুটিবিহীন) সম্ভাবনা নেই।

যেহেতু Nothingকোনও প্যারামিটার প্রকার নেই, যখন এটি নির্মাণকারী হিসাবে ব্যবহৃত হয় তখন এটি একটি ধ্রুবক মানটির নাম দেয় যা Maybe aসমস্ত ধরণের টাইপের সদস্য a। তবে Justকনস্ট্রাক্টরের একটি টাইপ প্যারামিটার থাকে, যার অর্থ দাঁড়ায় যে কনস্ট্রাক্টর হিসাবে ব্যবহৃত হলে এটি টাইপ থেকে ফাংশনের মতো কাজ aকরে Maybe a, অর্থাৎ এতে টাইপ থাকেa -> Maybe a

সুতরাং, কোনও প্রকারের নির্মাতারা সেই ধরণের মান তৈরি করে; জিনিসের অন্য দিকটি হ'ল আপনি যখন সেই মানটি ব্যবহার করতে চান এবং সেই সাথে প্যাটার্ন ম্যাচটি খেলতে আসে। ফাংশনগুলির বিপরীতে, কনস্ট্রাক্টরগুলি প্যাটার্ন বাইন্ডিং এক্সপ্রেশনগুলিতে ব্যবহার করা যেতে পারে, এবং এই পদ্ধতিতে আপনি একাধিক কনস্ট্রাক্টর সহ ধরণের মানগুলির ক্ষেত্রে বিশ্লেষণ করতে পারেন ।

Maybe aকোনও প্যাটার্ন ম্যাচে কোনও মান ব্যবহার করতে, আপনাকে প্রতিটি কন্সট্রাক্টরের জন্য একটি প্যাটার্ন সরবরাহ করতে হবে:

case maybeVal of
    Nothing   -> "There is nothing!"
    Just val  -> "There is a value, and it is " ++ (show val)

সেক্ষেত্রে প্রকাশের ক্ষেত্রে, মানটি হলে প্রথম প্যাটার্নটি মিলবে এবং মানটি যদি নির্মিত হয় Nothingতবে দ্বিতীয়টি মিলবে Just। যদি দ্বিতীয়টি ম্যাচ করে তবে এটির সাথে সেই মানটির সাথে আবদ্ধ হয় যা নির্ধারকের কাছে দেওয়া valহয়েছিল Justযখন আপনি যে মানটির সাথে মিলে যা মানটি তৈরি হয়েছিল।

কি হতে পারে মানে

এটি কীভাবে কাজ করে তা সম্পর্কে আপনি ইতিমধ্যে পরিচিত ছিলেন; Maybeমানগুলির কাছে আসলে কোনও জাদু নেই , এটি কেবলমাত্র একটি সাধারণ হাস্কেল বীজগণিত ডেটা টাইপ (এডিটি)। তবে এটি বেশ খানিকটা ব্যবহৃত হয়েছে কারণ এটি কার্যকরভাবে "উত্তোলন" করে বা কোনও প্রকারকে প্রসারিত করে, যেমন Integerআপনার উদাহরণ থেকে, এমন একটি নতুন প্রসঙ্গে যা এর অতিরিক্ত মূল্য ( Nothing) যা মানের অভাবকে প্রতিনিধিত্ব করে! টাইপ সিস্টেম তারপর যে আপনি যে অতিরিক্ত মান জন্য চেক আগেই আপনি এ পেতে দেব প্রয়োজন Integerযে পারে সেখানে। এটি বাগের উল্লেখযোগ্য সংখ্যক প্রতিরোধ করে।

অনেক ভাষা আজ নুল রেফারেন্সের মাধ্যমে এই ধরণের "নো-মান" মানটি পরিচালনা করে। টনি হোয়ার, একটি বিশিষ্ট কম্পিউটার বিজ্ঞানী (তিনি কুইকসোর্ট আবিষ্কার করেছিলেন এবং তিনি টুরিং অ্যাওয়ার্ড বিজয়ী) তিনি তার "বিলিয়ন ডলারের ভুল" হিসাবে এটির মালিক । সম্ভবত প্রকারটি এটির সমাধানের একমাত্র উপায় নয়, তবে এটি এটি কার্যকর করার উপায় হিসাবে প্রমাণিত হয়েছে।

ফ্যান্টেক্টর হিসাবে হতে পারে

এক প্রকারকে অন্য ধরণের রূপান্তরিত করার ধারণাটি যেমন পুরানো প্রকারের ক্রিয়াকলাপগুলিকে নতুন ধরণের কাজ করতেও রূপান্তর করা যায় যা হ্যাস্কেল প্রকার শ্রেণীর পিছনে ধারণাকে বলা হয় Functor, যার Maybe aএকটি কার্যকর উদাহরণ রয়েছে।

Functorনামক একটি পদ্ধতি সরবরাহ করে fmap, যা বেস টাইপ থেকে মানগুলির মধ্যে সীমাবদ্ধ ফাংশনগুলি মানচিত্র করে (যেমনInteger ) থেকে উত্তোলন প্রকারের (যেমন Maybe Integer) থেকে মানগুলির মধ্যে সীমাবদ্ধ ফাংশনগুলির । fmapএকটি Maybeমান নিয়ে কাজ করার জন্য একটি ফাংশন রূপান্তরিত হয় :

case maybeVal of
  Nothing  -> Nothing         -- there is nothing, so just return Nothing
  Just val -> Just (f val)    -- there is a value, so apply the function to it

তাই আপনি যদি একটি আছে Maybe Integerমান m_xএবং Int -> Intফাংশন f, আপনি কি করতে পারেন fmap f m_xফাংশন প্রয়োগ করতেf সরাসরি Maybe Integerউদ্বেজক যদি এটা আসলে একটি মান পেয়েছিলাম বা না ছাড়া। প্রকৃতপক্ষে, আপনি মানগুলিতে উত্তোলিত Integer -> Integerক্রিয়াকলাপগুলির একটি সম্পূর্ণ শৃঙ্খলা প্রয়োগ করতে পারেন Maybe Integerএবং Nothingযখন আপনি শেষ করেছেন তখন কেবল স্পষ্টভাবে পরীক্ষা করার বিষয়ে চিন্তা করতে হবে ।

হয়তো মোনাদ হিসাবে

আপনি Monadএখনও একটি ধারণার সাথে কতটা পরিচিত তা আমি নিশ্চিত নই , তবে আপনি কমপক্ষে IO aআগে ব্যবহার করেছেন , এবং স্বাক্ষর টাইপের স্বরূপ দেখতে খুব কমই IO aমিলছে Maybe a। যদিও IOএটি বিশেষ যে এটি এটির নির্মাণকারীদের আপনার কাছে প্রকাশ করে না এবং এটি হ্যাসেল রানটাইম সিস্টেম দ্বারা কেবল "রান" হতে পারে, এটি এখনও একটিFunctor হওয়ার পাশাপাশি সংযোজন Monad। প্রকৃতপক্ষে, একটি গুরুত্বপূর্ণ ধারণা রয়েছে যার মধ্যে a Monadহ'ল Functorকিছু বিশেষ বৈশিষ্ট্যযুক্ত একটি বিশেষ ধরণের , তবে এটি getোকানোর জায়গা নয়।

যাইহোক, মনডস IOনতুন ধরণের মানচিত্রের পছন্দ করে যা "মানগুলির ফলাফল হিসাবে গণনাগুলি" উপস্থাপন করে এবং আপনি এতে ফাংশন তুলতে পারেনMonad একটি অতি- fmapপছন্দসই ফাংশনটির মাধ্যমে প্রকারভেদে উত্থাপন liftM যা নিয়মিত ফাংশনটিকে "গণনাতে রূপান্তরিত করে" যা মূল্যায়নের মাধ্যমে প্রাপ্ত মানের ফলাফল করে ফাংশন। "

আপনি সম্ভবত অনুমান করেছেন (আপনি যদি এ পর্যন্ত পড়ে থাকেন) Maybeএটিও একটি Monad। এটি এমন "গণনা উপস্থাপন করে যা কোনও মান ফেরত দিতে ব্যর্থ হতে পারে"। fmapউদাহরণের মতোই , এটি আপনাকে প্রতিটি পদক্ষেপের পরে স্পষ্টভাবে ত্রুটিগুলি পরীক্ষা না করে সম্পূর্ণ গণনা করতে দেয়। এবং প্রকৃতপক্ষে, Monadউদাহরণটি যেভাবে নির্মিত হয় , Maybeমানগুলির একটি গণনা বন্ধ হয়ে যায় যত তাড়াতাড়ি একটি Nothingসম্মুখীন হয় তাই এটি একটি তাৎক্ষণিক পরিত্যাগ বা গণনার মাঝখানে একটা মূল্যহীন আগমন মত ধরনের।

আপনি লিখে থাকতে পারে

যেমনটি আমি আগে বলেছি, এর অন্তর্নিহিত কিছুই নেই Maybe ভাষার সিনট্যাক্স বা রানটাইম সিস্টেমে যে ধরণের বেকড রয়েছে তার মধ্যে । যদি হাস্কেল ডিফল্টরূপে এটি সরবরাহ না করে, তবে আপনি তার কার্যকারিতা সমস্ত নিজেরাই সরবরাহ করতে পারেন! আসলে, আপনি এটিকে আবার নিজের নামে আলাদা আলাদা নামের সাথে লিখতে এবং একই কার্যকারিতা পেতে পারেন।

আশা করি আপনি Maybeএখন টাইপ এবং এর নির্মাতাদের বুঝতে পারছেন, তবে এখনও যদি কিছু অস্পষ্ট থাকে তবে আমাকে জানান!


19
কী অসামান্য উত্তর! এটি উল্লেখ করা উচিত যে হাস্কেল প্রায়শই ব্যবহার করেন Maybeযেখানে অন্যান্য ভাষাগুলি ব্যবহার করবে nullবা nil( NullPointerExceptionপ্রতিটি কোণে দুষ্টু ছদ্মবেশ সহ )। এখন অন্যান্য ভাষাগুলিও এই কন্সট্রাক্টটি ব্যবহার করা শুরু করে: স্কেল হিসাবে Optionএবং জাভা 8 এরও Optionalটাইপ থাকবে।
ল্যান্ডেই

3
এটি একটি দুর্দান্ত ব্যাখ্যা। আমি যে ব্যাখ্যাটি পড়েছি সেগুলির মধ্যে অনেকগুলি এই ধরণের ইঙ্গিত দিয়েছিল যে জাস্ট হয়তো টাইপটির জন্য একজন নির্মাতা, তবে সত্যিই এটি কখনও স্পষ্ট করেনি।
রিম

@ লানডেই, পরামর্শের জন্য ধন্যবাদ। নাল রেফারেন্সগুলির বিপদ উল্লেখ করার জন্য আমি একটি সম্পাদনা করেছি।
লেভি পিয়ারসন

@ লান্দেই type০ এর দশকে এমএল হওয়ার পর থেকে বিকল্পের ধরণটি প্রায়শই ছিল, এটি স্কেল এমএল এর নামকরণ কনভেনশন ব্যবহার করে, কিছু এবং কোনওটিই নির্মাণকারীর সাথে অপশন ব্যবহার না করায় সম্ভবত স্কালা এটিকে সেখান থেকে তুলে নিয়েছিল।
স্টোনমেটাল

@ ল্যান্ডেই অ্যাপলের সুইফট বিকল্পগুলি কিছুটা ব্যবহার করেছে
জামিন

37

বর্তমানের উত্তরগুলির বেশিরভাগটি কীভাবে Justএবং বন্ধুরা কীভাবে কাজ করে তার উচ্চ প্রযুক্তিগত ব্যাখ্যা ; আমি ভেবেছিলাম এটির কী তা বোঝাতে আমি নিজের হাতটি চেষ্টা করতে পারি।

অনেকগুলি ভাষার একটি মান রয়েছে nullযা একটি বাস্তব মানের পরিবর্তে ব্যবহার করা যেতে পারে, কমপক্ষে কিছু প্রকারের জন্য। এটি প্রচুর লোককে খুব ক্রুদ্ধ করেছে এবং ব্যাপকভাবে এটি একটি খারাপ পদক্ষেপ হিসাবে বিবেচিত হয়েছে। তবুও, কখনও কখনও এটির মতো একটি মান রাখা কার্যকরnull কোনও জিনিসটির অনুপস্থিতি নির্দেশ করার ।

Haskell, আপনি স্পষ্টভাবে স্থান চিহ্নিত আপনি একটি থাকতে পারে যেখানে উপার্জন দ্বারা এই সমস্যা solves Nothing(তার একটি সংস্করণ null)। মূলত, যদি আপনার ফাংশনটি সাধারণত টাইপটি ফিরে আসে Fooতবে পরিবর্তে এটি টাইপটি ফিরে আসবে Maybe Foo। যদি আপনি এটি নির্দেশ করতে চান যে কোনও মূল্য নেই তবে ফিরে আসুন Nothing। আপনি যদি কোনও মান ফিরিয়ে দিতে চান তবে আপনার barপরিবর্তে ফিরে আসা উচিতJust bar

সুতরাং মূলত, যদি আপনার না থাকতে পারে তবে আপনার Nothingদরকার নেই Just। আপনি যদি পারেন Nothing, আপনার প্রয়োজন আছে Just

মায়াবী কিছুই নেই Maybe; এটি হাস্কেল টাইপ সিস্টেমে নির্মিত। তার মানে আপনি এটির সাথে সমস্ত সাধারণ হাস্কেল প্যাটার্ন মেলানোর কৌশল ব্যবহার করতে পারেন ।


1
অন্যান্য উত্তরের পাশে খুব সুন্দর উত্তর, তবে আমি মনে করি এটি কোনও কোড উদাহরণ থেকে এখনও উপকৃত হবে :)
পাস্কালভি কেটেন

13

একটি প্রকার দেওয়া হয়েছে t, এর মান Just tহ'ল টাইপের একটি বিদ্যমান মান twhereNothing কোনও মান পৌঁছাতে ব্যর্থতা বা এমন একটি ক্ষেত্রে যেখানে মান থাকা অর্থহীন হবে।

আপনার উদাহরণে, নেতিবাচক ভারসাম্য থাকা কোনও অর্থহীন নয়, এবং তাই যদি এই জাতীয় ঘটনা ঘটে থাকে তবে এটি দ্বারা প্রতিস্থাপন করা হবে Nothing

অন্য উদাহরণের জন্য, এটি বিভাগে ব্যবহার করা যেতে পারে, এমন একটি বিভাগ ফাংশন যা গ্রহণ করে aএবং সংজ্ঞায়িত করা হয় bএবং Just a/bযদি bননজারো হয় তবে ফিরে আসে Nothing। ব্যতিক্রমগুলির সুবিধাজনক বিকল্প হিসাবে বা আপনার পূর্ববর্তী উদাহরণের মতো এটি ব্যবহার করা হয় না এমন মানগুলি প্রতিস্থাপনের জন্য এটি প্রায়শই এর মতো ব্যবহৃত হয়।


1
সুতরাং আসুন উপরের কোডে আমি বললাম যে আমি ন্যায়বিচারকে সরিয়েছি, কেন এটি কাজ করবে না? আপনার যখন কিছু না চান ঠিক তখনই কি আপনার থাকতে হবে? এমন অভিব্যক্তিটির কী ঘটে যেখানে সেই অভিব্যক্তির অভ্যন্তরের কোনও ক্রিয়া কিছুই না ফেরায়?
রিম

7
আপনি যদি এটি সরিয়ে Justফেলেন তবে আপনার কোডটি টাইপচেক করবে না। Justসঠিক কারণগুলি বজায় রাখার কারণ । সেখানে একটি টাইপ (একটি একসংখ্যা, আসলে, কিন্তু এটা শুধু একটি টাইপ হিসেবে মনে করা আরো সহজ) হল Maybe t, ফর্ম উপাদান নিয়ে গঠিত যা Just tএবং Nothing। যেহেতু Nothingটাইপ আছে Maybe t, এমন একটি অভিব্যক্তি যা মূল্যায়ন করতে পারে Nothingবা যে কোনও ধরণের মান tসঠিকভাবে টাইপ করা হয় না। যদি কোনও ফাংশন Nothingকিছু ক্ষেত্রে প্রত্যাবর্তন করে তবে সেই ফাংশনটি ব্যবহার করে যে কোনও এক্সপ্রেশনের অবশ্যই ( isJustবা কোনও কেস স্টেটমেন্ট) যাচাইয়ের কিছু উপায় থাকতে হবে , যাতে সমস্ত সম্ভাব্য কেসগুলি পরিচালনা করতে পারে।
কফলা

2
সুতরাং জাস্ট টাইপটির মধ্যে সামঞ্জস্যপূর্ণ থাকার জন্য কেবলমাত্র কারণ একটি নিয়মিত টি সম্ভবত টাইপের মধ্যে নেই। সবকিছু এখন অনেক পরিষ্কার। ধন্যবাদ!
রিম

3
@ কিফলা: "মোনাদ, আসলে, [...]" হওয়ার বিষয়ে আপনার মন্তব্য বিভ্রান্তিকর। Maybe t হয় শুধু একটি প্রকার। Monadউদাহরণস্বরূপ যে ঘটনাটি Maybeএটি কোনও ধরণের নয় এমন কিছুতে রূপান্তরিত করে না।
সারা

2

মোট ফাংশন এ-> বি টাইপ এ এর ​​প্রতিটি সম্ভাব্য মানের জন্য টাইপ বি এর মান খুঁজে পেতে পারে।

হাস্কেলে সমস্ত ফাংশন মোট হয় না। এই বিশেষ ক্ষেত্রে ফাংশনlend মোট নয় - যখন ভারসাম্য রিজার্ভের তুলনায় কম থাকে তখন এটি সংজ্ঞায়িত হয় না (যদিও, আমার স্বাদ অনুসারে নতুন ব্যালেন্সকে রিজার্ভের চেয়ে কম রাখার অনুমতি না দেওয়া আরও বুদ্ধিমান হবে - যেমন, আপনি এর থেকে 101 ধার নিতে পারেন 100 এর ভারসাম্য)।

অন্যান্য নকশাগুলি যা নিখরচায় ফাংশনগুলি নিয়ে কাজ করে:

  • ইনপুট মানটি পরীক্ষা করার পরে ব্যতিক্রমগুলি ছুঁড়ে দেওয়া পরিসরের সাথে খাপ খায় না
  • একটি বিশেষ মান ফেরান (আদিম ধরণের): প্রিয় পছন্দটি প্রাকৃতিক সংখ্যাগুলি বোঝাতে বোঝানো পূর্ণসংখ্যার ক্রিয়াগুলির জন্য একটি নেতিবাচক মান (উদাহরণস্বরূপ, স্ট্রিং.ইন্ডেক্সঅফ - যখন কোনও স্ট্রিংং পাওয়া যায় না, প্রত্যাবর্তিত সূচকটি সাধারণত commonlyণাত্মক হিসাবে ডিজাইন করা হয়)
  • একটি বিশেষ মান (পয়েন্টার) ফেরান: নুল বা এই জাতীয় কিছু
  • নিঃশব্দে কিছু না করে ফিরে আসুন: উদাহরণস্বরূপ, lendbalanceণ দেওয়ার শর্তটি পূরণ না করা হলে পুরানো ভারসাম্য ফিরিয়ে আনতে লেখা যেতে পারে
  • একটি বিশেষ মান ফেরত দিন: কিছুই নয় (বা কিছু ত্রুটি বর্ণনাকারী বস্তু মোড়ানো বাম)

এগুলি হ'ল ভাষাগুলিতে প্রয়োজনীয় নকশার সীমাবদ্ধতা যা ফাংশনগুলির সামগ্রিকতা প্রয়োগ করতে পারে না (উদাহরণস্বরূপ, আগদা পারেন, তবে এটি অন্যান্য জটিলতার দিকে নিয়ে যায়, যেমন টুরিং-অসম্পূর্ণ হয়ে ওঠে))

কোনও বিশেষ মান ফেরত দেওয়া বা ব্যতিক্রম ছোঁড়াতে সমস্যাটি হ'ল কলারের পক্ষে ভুল করে এই জাতীয় সম্ভাবনাটি পরিচালনা করা বাদ দেওয়া সহজ।

নিঃশব্দে একটি ব্যর্থতা বাতিল করার সমস্যাটিও সুস্পষ্ট - আপনি কলকারী ফাংশনটি দিয়ে কী করতে পারে তা সীমাবদ্ধ করছেন। উদাহরণস্বরূপ, যদি lendপুরানো ভারসাম্য ফিরে আসে তবে ভারসাম্য বদলেছে কিনা তা কলারের কাছে জানার কোনও উপায় নেই। উদ্দেশ্যযুক্ত উদ্দেশ্য অনুসারে এটি সমস্যা বা নাও হতে পারে।

হাস্কেলের সমাধান একটি আংশিক ফাংশন কলকারীকে এই জাতীয় ধরণের সাথে কাজ করতে বাধ্য করে Maybe aবা Either error aফাংশনটির ফিরে আসার ধরণের কারণে।

এই পদ্ধতি lendকিছু পরিস্থিতিতে জন্য নতুন ভারসাম্য সংজ্ঞায়িত করা হয় না - যেমন সংজ্ঞায়িত করা হয়, একটি ফাংশন যে সবসময় নতুন ভারসাম্য গনা না। আমরা বিশেষ পরিস্থিতিতে কিছু না কিছু ফিরিয়ে দিয়ে, বা জাস্টে নতুন ভারসাম্যটি মোড়কের মাধ্যমে এই পরিস্থিতিকে কলারের কাছে সংকেত দিই। কলারের এখন চয়ন করার স্বাধীনতা রয়েছে: হয় কোনও বিশেষ উপায়ে ndণ দেওয়ার ব্যর্থতাটি পরিচালনা করুন, বা পুরানো ভারসাম্য উপেক্ষা করুন এবং ব্যবহার করুন - উদাহরণস্বরূপ maybe oldBalance id $ lend amount oldBalance,।


-1

ফাংশনে if (cond :: Bool) then (ifTrue :: a) else (ifFalse :: a)অবশ্যই একই ধরণের ifTrueএবং থাকতে হবে ifFalse

সুতরাং, যখন আমরা লিখি then Nothing, আমাদের অবশ্যই Maybe aটাইপ ব্যবহার করতে হবেelse f

if balance < reserve
       then (Nothing :: Maybe nb)         -- same type
       else (Just newBalance :: Maybe nb) -- same type

1
আমি নিশ্চিত আপনি কি সত্যিই গভীর এখানে কিছু বলতে বোঝানো করছি
sehe

1
হাস্কেলের প্রকারভেদ রয়েছে। এর ধরণ Nothingএবং Just newBalanceস্পষ্টভাবে বলার দরকার নেই।
ডানফোল্ড

নিরবচ্ছিন্নদের এই ব্যাখ্যার জন্য, সুস্পষ্ট প্রকারের ব্যবহারের অর্থটি স্পষ্ট করে Just
ফিলিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.