হাস্কেল-এ, বাইন্ড অপারেটর এবং ক্লেস্লি অপারেটরের মধ্যে পার্থক্য কী এবং তারা কীভাবে সম্পর্কিত?


উত্তর 1:

আমি ধরে নিচ্ছি যে:

  • 'বাইন্ড অপারেটর' হ'ল মোনাডিক বাইন্ড: >> = 'ক্লাইস্লি অপারেটর' ক্লাইসলি তীর (ওরফে 'ফিশ') এর রচনা:> =>

প্রথমত, একটি ক্লিসলি তীর ফর্মটির একটি ক্রিয়া

a -> এমবি

কিছু মোনাদ মি। আমরা এই ফর্মের দুটি তীর তৈরি করতে পারি তৃতীয় গঠনের জন্য, সাধারণ ফাংশন কম্পোজিশনের মতো (যুক্তিগুলির ক্রম বাদে)। এটিই ক্লাইসলি তীরের রচনা অপারেটর (ওরফে 'ফিশ'):

(> =>) :: (ক -> এমবি) - প্রথম ক্লেস্লি তীর -> (বি -> এমসি) - দ্বিতীয় ক্লেস্লি তীর -> (এ -> এমসি)

আমরা যদি ফিরে আসার সাথে স্নাতকের সংজ্ঞা এবং যোগদানের জন্য বেছে নিই, তবে আমরা এটি লিখতে পারি

(f> => g) x = join (g <$> fx)

কারণ

(g <$> fx) :: মি (এমসি)

যেখানে <$> হ'ল এফএমএপির ইনফিক্স বৈকল্পিক। বিন্দুবিহীন স্বরলিপি:

f> => ছ = যোগ দিন। এফএমএপি জি। চ

(প্রত্যাহার করুন যে রিটার্নটি একটি খাঁটি মানকে জড়িয়ে দেয় এবং যোগদানের ফলে নীড়ের এক স্তর (এম (মা) -> মা) সরে যায়))

বাইন্ড অপারেটর একটি monadic মান একটি Kleisli তীর প্রয়োগ:

(>> =) :: মা - একাকী মান -> (ক -> এমবি) - ক্লাইসলি তীর -> এমবি

এটি প্রত্যাবর্তনের ক্ষেত্রে এবং যোগদানের ক্ষেত্রেও সংজ্ঞায়িত হতে পারে:

mx >> = f = join (f <$> mx)

একইভাবে, কারণ

(চ <$> এমএক্স) :: এম (এমবি)

আমরা বাস্তবে 'ফিশ' এবং এর বিপরীত দিকের সাথে আবদ্ধ সংজ্ঞা দিতে পারি:

এমএক্স >> = এফ = (কনটেক্স এমএক্স> => চ) () (এফ> => ছ) এক্স = এফএক্স >> = জি