কোনও বাধা নেই! আমি যখন টাইপ কন্সট্রাক্টরদের জন্য বিভাগ-তাত্ত্বিক ভিত্তি শিখতে শুরু করি তখন এই বিষয়টি আমাকেও বিভ্রান্ত করেছিল। আমরা এটি পেতে হবে। তবে প্রথমে আমাকে কিছু বিভ্রান্তি দূর করতে দিন। এই দুটি উদ্ধৃতি:
এই জাতীয় ফান্টারের কাছে কেবলমাত্র টার্গেট বিভাগ হিসাবে টাইপ কনস্ট্রাক্টর ব্যবহার করে একটি বিভাগ তৈরি করা যেতে পারে
এবং
যে কোনও ফ্যাঙ্ক্টরকে কোনও ফান্টারের টার্গেট হিসাবে কোনও বিভাগ থাকা ফ্যাটারগুলি ভাবতে পারে, যেমন সমস্ত হাস্কেল প্রকারের বিভাগ
দেখান যে কোনও ফান্টেক্টর কী তা আপনি ভুল বোঝাচ্ছেন (বা খুব কমপক্ষে আপনি পরিভাষার অপব্যবহার করছেন)।
Functors না গঠন করা বিভাগ। একটি ফান্টেক্টর বিভাগগুলির মধ্যে ম্যাপিং । ফ্যাক্টরগুলি লক্ষ্য বিভাগে অবজেক্ট এবং মোর্ফিজমগুলিকে উত্স বিভাগে অবজেক্টস এবং মরফিজমগুলি (ধরণ এবং ফাংশন) এনে দেয়।
মনে রাখবেন যে এর অর্থ একটি ফান্টার আসলেই ম্যাপিংয়ের একটি জুড়ি : F_obj অবজেক্টগুলিতে ম্যাপিং এবং রূপকথনে ম্যাপিং এফ_মোর্ফ । হাস্কেল-তে, ফান্টিকারের অবজেক্ট অংশ F_obj টাইপ কনস্ট্রাক্টরের নাম (যেমন List
), যখন মরফিজম অংশটি ফাংশন হয় fmap
(এটি যেহেতু fmap
আমরা কোনও প্রদত্ত অভিব্যক্তিতে উল্লেখ করছি যা সাজানোর জন্য হাস্কেল সংকলক পর্যন্ত )। সুতরাং, আমরা বলতে পারি না যে List
এটি একটি ফান্টেক্টর; শুধুমাত্র সংমিশ্রণ List
এবং fmap
একটি ফান্টেক্টর। তবুও, লোকেরা স্বরলিপি অপব্যবহার করে; প্রোগ্রামাররা List
একটি ফান্টেক্টরকে কল করে , যখন বিভাগের তাত্ত্বিকরা ফান্টারের উভয় অংশকে বোঝাতে একই চিহ্ন ব্যবহার করে use
তদ্ব্যতীত, প্রোগ্রামিংয়ে, প্রায় সমস্ত ফান্ট্যাক্টরগুলি এন্ডোফান্টেক্টর , অর্থাত্ উত্স এবং লক্ষ্য বিভাগটি একই in আমাদের ভাষার সকল প্রকারের বিভাগ। এই বিভাগটি টাইপ করুন । একটি endofunctor এফ উপর প্রকার একটি টাইপ মানচিত্র টি অন্য ধরনের ফুলটাইম এবং একটি ফাংশন > এস - টি অন্য ফাংশন ফুলটাইম -> ফাঃ । এই ম্যাপিং অবশ্যই অবশ্যই ফান্টারের আইন মেনে চলবে।
List
উদাহরণ হিসাবে ব্যবহার করে : আমাদের কাছে টাইপ কনস্ট্রাক্টর List : Type -> Type
এবং একটি ফাংশন রয়েছে fmap: (a -> b) -> (List a -> List b)
যা একসাথে ফান্টেক্টর গঠন করে। টি
পরিষ্কার করার জন্য একটি চূড়ান্ত বিষয় রয়েছে। লিখন পূর্ণসংখ্যার নতুন ধরণের তালিকা তৈরিList int
করে না । এই ধরণের ইতিমধ্যে বিদ্যমান । এটি আমাদের বিভাগের টাইপের একটি বিষয় ছিল । এটি উল্লেখ করার সহজ উপায়।List Int
এখন, আপনি ভাবছেন যে কোনও ফান্ট্যাক্টর কেন, বলতে Int
বা বলার জন্য কোনও ধরণের মানচিত্র তৈরি করতে পারে না String
। কিন্তু এটা করতে পারেন! একজনকে কেবল পরিচয় ফান্টর ব্যবহার করতে হবে। যে কোনও বিভাগ সি এর জন্য , পরিচয় বর্ণনাকারী প্রতিটি বস্তুকে নিজের কাছে মানচিত্র এবং নিজেই মর্ফিজমকে মানচিত্র করে। এই ম্যাপিংটি ফান্টারের আইনগুলিকে সন্তুষ্ট করে যাচাই করা সহজবোধ্য। হাসকেলে, এটি এমন এক প্রকার নির্মাতা হবে id : * -> *
যা প্রতিটি ধরণের নিজের কাছে মানচিত্র করে। উদাহরণস্বরূপ, id int
মূল্যায়ন int
।
তদ্ব্যতীত , কেউ এমনকী ধ্রুবক ফান্টেক্টর তৈরি করতে পারে , যা সমস্ত ধরণের মানচিত্রকে একক প্রকারের করে। উদাহরণস্বরূপ, ফান্টেক্টর ToInt : * -> *
, যেখানে ToInt a = int
সমস্ত প্রকারের জন্য এবং সমস্ত রূপের a
মানচিত্র পূর্ণসংখ্যার পরিচয় ফাংশনে ম্যাপ করে: fmap f = \x -> x