Haskell এ Functor এবং Applicative এর ধারণা
Haskell এ Functor এবং Applicative হলো দুইটি গুরুত্বপূর্ণ টাইপ ক্লাস, যা ফাংশনাল প্রোগ্রামিংয়ের কনটেক্সটে মানচিত্রণ এবং অপারেশনগুলোকে আরও সাধারণ এবং মডুলার করে তোলে। Functor এবং Applicative এর মাধ্যমে ডেটা স্ট্রাকচারের উপরে অপারেশন প্রয়োগ করা যায়, যা কোডকে আরও সংক্ষিপ্ত এবং কার্যকর করে।
Functor
Functor একটি টাইপ ক্লাস যা fmap ফাংশনের মাধ্যমে ডেটা স্ট্রাকচারের উপর ফাংশন প্রয়োগ করতে ব্যবহৃত হয়। Functor এমন একটি টাইপ ক্লাস, যেখানে যেকোনো ফাংশনকে ডেটা স্ট্রাকচারের প্রতিটি উপাদানের উপর মানচিত্রিত করা যায়।
Functor এর বৈশিষ্ট্য:
- fmap: Functor এর প্রধান অপারেশন হলো
fmap, যা একটি ফাংশন এবং একটি Functor নেয় এবং Functor এর প্রতিটি উপাদানের উপর ফাংশন প্রয়োগ করে। - প্রকৃতি: Functor সাধারণত লিস্ট, Maybe, ইত্যাদি টাইপের ডেটা স্ট্রাকচারে ব্যবহৃত হয়।
- ল অব ইডেন্টিটি:
fmap id == id - ল অব কম্পোজিশন:
fmap (f . g) == fmap f . fmap g
Functor এর উদাহরণ:
instance Functor Maybe where
fmap _ Nothing = Nothing
fmap f (Just x) = Just (f x)এখানে, Maybe কে একটি Functor হিসেবে সংজ্ঞায়িত করা হয়েছে। fmap Nothing এর জন্য কিছুই করে না এবং Just x এর উপরে ফাংশন f প্রয়োগ করে।
উদাহরণ:
fmap (+1) (Just 5) -- আউটপুট: Just 6
fmap (+1) Nothing -- আউটপুট: NothingApplicative
Applicative টাইপ ক্লাস Functor এর চেয়ে শক্তিশালী, কারণ এটি এমন ফাংশনের উপর কাজ করে যা একাধিক আর্গুমেন্ট নেয়। Applicative এর মাধ্যমে একাধিক Functor এর মধ্যে ফাংশন প্রয়োগ করা সম্ভব।
Applicative এর বৈশিষ্ট্য:
- pure: Applicative এর প্রধান ফাংশন
pure, যা একটি মানকে Applicative টাইপের মধ্যে রাখে। - <*> (apply): একটি ফাংশন যা Applicative টাইপের ফাংশনকে Applicative টাইপের মানের উপর প্রয়োগ করে।
- ল অব ইডেন্টিটি:
pure id <*> v == v - ল অব কম্পোজিশন:
pure (.) <*> u <*> v <*> w == u <*> (v <*> w)
Applicative এর উদাহরণ:
instance Applicative Maybe where
pure = Just
Nothing <*> _ = Nothing
(Just f) <*> something = fmap f somethingএখানে, Maybe Applicative হিসেবে সংজ্ঞায়িত করা হয়েছে। pure একটি মানকে Just এর মধ্যে রাখে এবং <*> ফাংশনকে Maybe টাইপের মানের উপরে প্রয়োগ করে।
উদাহরণ:
pure (+) <*> Just 3 <*> Just 4 -- আউটপুট: Just 7
pure (+) <*> Nothing <*> Just 4 -- আউটপুট: NothingFunctor এবং Applicative এর পার্থক্য
| বৈশিষ্ট্য | Functor | Applicative |
|---|---|---|
| প্রধান ফাংশন | fmap | pure এবং <*> |
| ক্ষমতা | একক ফাংশনকে Functor এর উপর প্রয়োগ করে | একাধিক Functor এর উপর ফাংশন প্রয়োগ করতে পারে |
| ল অব ইডেন্টিটি | fmap id == id | pure id <*> v == v |
| ডিপেন্ডেন্সি | শুধুমাত্র Functor টাইপ | Applicative Functor এর চেয়ে শক্তিশালী |
উদাহরণ: Functor এবং Applicative একত্রে ব্যবহার
নিচে Maybe টাইপে Functor এবং Applicative একত্রে ব্যবহারের উদাহরণ দেওয়া হলো।
-- Functor উদাহরণ
result1 :: Maybe Int
result1 = fmap (*2) (Just 5) -- আউটপুট: Just 10
-- Applicative উদাহরণ
result2 :: Maybe Int
result2 = pure (+) <*> Just 3 <*> Just 7 -- আউটপুট: Just 10উপসংহার
Functor এবং Applicative Haskell এর টাইপ ক্লাস, যা ফাংশনকে বিভিন্ন ডেটা স্ট্রাকচারের উপর প্রয়োগ করে। Functor একক ফাংশনকে ডেটা স্ট্রাকচারের উপরে প্রয়োগ করতে ব্যবহৃত হয়, যেখানে Applicative একাধিক Functor এর মধ্যে ফাংশন প্রয়োগ করতে সক্ষম। Functor এবং Applicative একত্রে Haskell এর ফাংশনাল প্রোগ্রামিংয়ে শক্তিশালী টুল হিসেবে কাজ করে।
Read more