হ্যাঁ. একে বলা হয় "অভিধান পাসিং স্টাইল"। কখনও কখনও আমি যখন বিশেষত কৌতুকপূর্ণ কাজগুলি করি তখন আমাকে একটি টাইপক্লাস স্ক্র্যাপ করে অভিধানে পরিণত করা দরকার, কারণ অভিধান পাস করা আরও শক্তিশালী 1 , তবে প্রায়শই বেশ জটিল, ধারণাগতভাবে সহজ কোডটি বেশ জটিল দেখায়। আমি কখনও কখনও এমন ভাষাগুলিতে অভিধান পাসিং স্টাইল ব্যবহার করি যা টাইপক্লাসগুলি অনুকরণ করার জন্য হাস্কেল নয় (তবে শিখেছি যে এটি সাধারণত মনে হয় তেমন ধারণা নয়) great
অবশ্যই, যখনই অভিব্যক্তিগত শক্তির মধ্যে পার্থক্য হয়, সেখানে বাণিজ্য বন্ধ থাকে। আপনি যদি কোনও প্রদত্ত এপিআই আরও বেশি উপায়ে ব্যবহার করতে পারেন তবে এটি ডিপিএস ব্যবহার করে লেখা থাকলে, আপনি না পারলে এপিআই আরও তথ্য পায়। Data.Setবাস্তবে এটি প্রদর্শিত করার একটি উপায় রয়েছে , যা Ordপ্রতি টাইপের জন্য কেবল একটি অভিধান রয়েছে তা নির্ভর করে । Setদোকানে তার উপাদান অনুযায়ী সাজানো Ord, এবং যদি আপনি এক অভিধান সঙ্গে একটি সেট সংগ্রহ করতে, এবং তারপর একটি উপাদান একটি ভিন্ন ব্যবহার ঢোকানো, যেমন ডিপিএস সঙ্গে সম্ভব হবে, আপনি ভাঙতে পারে Setএর পরিবর্তিত এবং এটি বিপর্যস্ত হতে পারে। এই স্বতন্ত্রতা সমস্যাটি অল্প অস্তিত্ব ব্যবহার করে প্রশমিত করা যেতে পারেঅভিধানটি চিহ্নিত করতে টাইপ করুন, তবে, আবার এপিআইতে বিরক্তিকর জটিলতার জন্য ব্যয় করুন। এটি এপিআইতেও একইভাবে প্রদর্শিত হয় Typeable।
স্বতন্ত্রতা বিট খুব প্রায়ই আসে না। টাইপচ্লাসে যা দুর্দান্ত তা আপনার জন্য কোড রচনা। উদাহরণ স্বরূপ,
catProcs :: (i -> Maybe String) -> (i -> Maybe String) -> (i -> Maybe String)
catProcs f g = f <> g
এটিতে দুটি "প্রসেসর" লাগে যা একটি ইনপুট নেয় এবং একটি আউটপুট দেয় এবং তাদের সমঝোতা করে চ্যাপ্টা করে ডিপিএসে Nothingএই জাতীয় কিছু লিখতে হবে:
catProcs f g = (<>) (funcSemi (maybeSemi listSemi)) f g
আমরা এটির পুনরায় যে প্রকারটি ব্যবহার করছি তা আমাদের মূলত বানান করতে হয়েছিল, যদিও আমরা ইতিমধ্যে স্বাক্ষর প্রকারে এটি বানান করেছি, এমনকি এটি অপ্রয়োজনীয় কারণ সংকলকটি ইতিমধ্যে সমস্ত প্রকারগুলি জানে। Semigroupকোনও ধরণের প্রদত্ত একটি নির্মাণের একমাত্র উপায় থাকার কারণে , সংকলকটি এটি আপনার জন্য করতে পারে। সংযুক্তকারীদের মতো আপনি যখন অনেকগুলি প্যারামিটারিক দৃষ্টান্তগুলি সংজ্ঞায়িত করতে এবং আপনার ধরণের কাঠামোটি আপনার জন্য গণনা করতে শুরু করেন তখন এটির একটি "যৌগিক আগ্রহ" টাইপ প্রভাব রয়েছে Data.Functor.*এবং এটি দুর্দান্ত প্রভাব ফেলবে deriving viaযেখানে আপনি মূলত সমস্ত জিনিস পেতে পারেন আপনার জন্য রচিত আপনার প্রকারের "স্ট্যান্ডার্ড" বীজগণিত কাঠামো।
এমনকি আমাকে এমপিটিসি এবং ফান্ডেপগুলিতেও শুরু করবেন না, যা তথ্যকে টাইপচেকিং এবং অনুমান হিসাবে ফিরিয়ে দেয়। আমি কখনও এ জাতীয় জিনিসকে ডিপিএসে রূপান্তর করার চেষ্টা করি নি - আমার সন্দেহ হয় এটি অনেক ধরণের সাম্য প্রমাণের পাশ দিয়ে জড়িত জড়িত - তবে যে কোনও ক্ষেত্রে আমি নিশ্চিত যে আমার মস্তিষ্কের জন্য আমি আরামদায়ক হওয়ার চেয়ে অনেক বেশি কাজ করব sure সঙ্গে.
-
1 ইউ nless আপনি ব্যবহার reflectionযা কেস তারা ক্ষমতায় সমতুল্য হয়ে - কিন্তু reflectionব্যবহার করা কষ্টকর হতে পারে।