ফ্রি ফু হ'ল সহজ জিনিস যা সমস্ত 'ফু' আইনকে সন্তুষ্ট করে। এর অর্থ এটি foo হওয়ার জন্য প্রয়োজনীয় আইনগুলি যথাযথভাবে সন্তুষ্ট করে এবং অতিরিক্ত কিছু না।
একটি বিস্মৃত ফান্টেক্টর হ'ল এমন একটি যা কাঠামোর একটি অংশ "ভুলে যায়" কারণ এটি এক বিভাগ থেকে অন্য বিভাগে যায়।
Functors দেওয়া F : D -> C
, এবং G : C -> D
, আমরা বলতে F -| G
, F
বাম adjoint হয় G
, অথবা G
করার অধিকার adjoint হয় F
যখনই forall A, B: F a -> b
থেকে isomorphic হয়a -> G b
, যেখানে তীর উপযুক্ত বিভাগ থেকে আসা।
আনুষ্ঠানিকভাবে, একটি ফ্রি ফ্যাক্টর একটি ভুলে যাওয়া ফান্টারের সাথে অ্যাডজাস্ট রেখে যায়।
ফ্রি মনয়েড
আসুন আমরা একটি মুক্ত উদাহরণ, একটি সহজ উদাহরণ দিয়ে শুরু করি।
একটি মনোয়েড নিন, যা কিছু ক্যারিয়ার সেট দ্বারা সংজ্ঞায়িত করা হয়েছে T
, একত্রে উপাদানগুলির একত্রে ম্যাশ করার জন্য একটি বাইনারি ফাংশন f :: T → T → T
এবং এ unit :: T
, যেমন আপনার একটি সহযোগী আইন এবং একটি পরিচয় আইন রয়েছে:f(unit,x) = x = f(x,unit)
।
আপনি একটি functor করতে পারেন U
monoids এর বিভাগ থেকে (যেখানে তীর monoid homomorphisms হয়, যে, তারা নিশ্চিত হয়ে নেন যে মানচিত্র unit
থেকে unit
অন্যান্য monoid, এবং আপনি আগে বা অন্যান্য monoid করার ম্যাপিং পর অর্থ পরিবর্তন না করে রচনা করতে পারে) বিভাগের সেটগুলির (যেখানে তীরগুলি কেবল ফাংশন তীরগুলি থাকে) যা অপারেশন সম্পর্কে 'ভুলে যায়' এবংunit
এবং আপনাকে ক্যারিয়ার সেট দেয়।
তারপরে, আপনি F
সেট ফটোগুলির সংযোজন রেখে যাওয়া মনোয়েডদের বিভাগে ফ্যাটাক্টরের সংজ্ঞা দিতে পারেন। সেই ফান্টেক্টর হ'ল ফান্টেক্টর যা a
মনোয়েড [a]
, কোথায় unit = []
, এবং একটি সেট মানচিত্র করেmappend = (++)
।
সুতরাং এখন পর্যন্ত আমাদের উদাহরণটি পর্যালোচনা করার জন্য সিউডো-হাস্কেল:
U : Mon → Set -- is our forgetful functor
U (a,mappend,mempty) = a
F : Set → Mon -- is our free functor
F a = ([a],(++),[])
তারপরে F
নিখরচায় প্রদর্শন করার জন্য, আমাদের এটি প্রদর্শন করতে হবে যে এটি U
একটি বিস্মৃত ফান্টিকারকে রেখে দেওয়া হয়েছে, যা আমরা উপরে উল্লেখ করেছি, আমাদের এটি প্রদর্শন করা দরকার
F a → b
isomorphic হয় a → U b
এখন, মনে রাখবেন এর লক্ষ্যটি মনোয়েডদের F
বিভাগে Mon
রয়েছে, যেখানে তীরগুলি মনোয়েড হোমোর্ফিজম হয়, সুতরাং আমাদের এটির একটি দেখাতে হবে যা থেকে কোনও মনোয়েড হোমোমর্ফিজম [a] → b
একটি ফাংশন দ্বারা সঠিকভাবে বর্ণনা করা যায় a → b
।
হাস্কেল-এ, আমরা এর পাশটিকে কল করি যা বাস করে Set
(এর, Hask
হাস্কেল ধরণের শ্রেণীর যেটি আমরা সেট করি সেট করা হয়) foldMap
, যা কেবল Data.Foldable
তালিকাগুলির তালিকাগুলিতে টাইপ থাকে Monoid m => (a → m) → [a] → m
।
এর ফলে এমন একটি পরিণতি ঘটে যা একটি অ্যাডজেকশন হওয়ার পরে অনুসরণ করে। লক্ষণীয় যে আপনি যদি ভুলে যান তবে নিখরচায় তৈরি করুন, তবে আবার ভুলে যান, ঠিক যেমনটি আপনি একবার ভুলে গিয়েছিলেন, এবং আমরা একে monadic যোগদানের জন্য তৈরি করতে ব্যবহার করতে পারি। যেহেতু UFUF
~ U(FUF)
~UF
, এবং আমরা পরিচয় monoid homomorphism থেকে পাস করতে পারেন [a]
করতে [a]
isomorphism আমাদের ক্রোড়পত্র সংজ্ঞায়িত মাধ্যমে যে থেকে একটি তালিকা isomorphism পেতে [a] → [a]
ধরনের একটি ফাংশন a -> [a]
, এবং এই মাত্র তালিকার জন্য দিকেই প্রত্যাবর্তন হবে।
আপনি এইগুলির সাথে এই পদগুলিতে একটি তালিকা বর্ণনা করে আরও সরাসরি রচনা করতে পারেন:
newtype List a = List (forall b. Monoid b => (a -> b) -> b)
ফ্রি মোনাড
সুতরাং কি ফ্রি মোনাড কী?
ঠিক আছে, আমরা আগে যা করেছি আমরা একই কাজটি করেছি, আমরা একটি ভুলে যাওয়া ফান্টর ইউ দিয়ে শুরু করি মনডের বিভাগ থেকে যেখানে তীরগুলি মনড হোমোমর্ফিজমকে এমন একটি বিভাগে পাঠানো হয় যেখানে তীরগুলি প্রাকৃতিক রূপান্তর হয়, এবং আমরা একটি ফান্টারের সন্ধান করি যা পিছনে বসে আছে যে।
সুতরাং, এটি সাধারণত একটি মুক্ত মোনাডের ধারণার সাথে কীভাবে সম্পর্কিত কারণ এটি ব্যবহৃত হয়?
কিছু জানা একটি বিনামূল্যে একসংখ্যা হয়, Free f
আপনি বলে যে থেকে একটি একসংখ্যা homomorphism দান Free f -> m
, একই জিনিস (থেকে isomorphic) থেকে একটি প্রাকৃতিক রূপান্তর (ক functor homomorphism) দান হিসাবে f -> m
। মনে রাখবেন F a -> b
অবশ্যই আইসমোর্ফিক হতে হবেa -> U b
এফ functors করার ইউ ইউ এখানে ম্যাপ monads বাম adjoint আছি।
Free
আমি যে টাইপটি ব্যবহার করি তা হ'ল এফ হ'ল অন্তত আইসমোরফিক phfree
হ্যাকেশনে প্যাকেজে আইসোমরফিক।
আমরা এটি নির্ধারণ করে ফ্রি তালিকার জন্য উপরের কোডটির সাথে কঠোর সাদৃশ্য তৈরি করতে পারি
class Algebra f x where
phi :: f x -> x
newtype Free f a = Free (forall x. Algebra f x => (a -> x) -> x)
কফ্রি কমোনাদস
আমরা একটি অনুরূপ কিছু তৈরি করতে পারি, ভুলে যাওয়া ফান্টারের ডান অ্যাডেজমেন্ট দেখে এটি উপস্থিত রয়েছে ধরে নিয়ে। একটি কফ্রি ফান্টেক্টর সহজ / ডান অ্যাডজেট / একটি ভুলে যাওয়া ফান্টারের কাছে, এবং প্রতিসামগ্রন্থ অনুসারে, কোনও কিছু জানা একটি কফ্রি কমোনাদ হ'ল সমান যে জেনে রাখা আছে যে একটি কমোনাদ হোমোর্মিজম থেকে w -> Cofree f
প্রাকৃতিক রূপান্তর দেওয়া একই জিনিস w -> f
।