কোমোনডস এবং ফান্টাক্টরের মধ্যে বসে সহ-প্রয়োগমূলক ফান্ট্যাক্টারের মতো কিছুর ধারণা আছে?


17

যে কোনও মোনাড হ'ল একটি আবেদনকারী ফান্টেক্টর এবং কোনও প্রয়োগকারী ফান্টেক্টর একটি ফান্টেক্টর। এছাড়াও, যে কোনও কমোনাদ হ'ল ফান্টেক্টর। কমোনাদ এবং ফান্টেক্টরগুলির মধ্যে কি একই রকম ধারণা রয়েছে, সহ-প্রয়োগকারী ফান্টারের মতো কিছু এবং এর বৈশিষ্ট্যগুলি কী কী?

FunctorsFunctorsApplicative functors???MonadsComonads

আপডেট: আমি এই জাতীয় ধারণার সম্ভাব্য ব্যবহারগুলিতে আগ্রহী হব।


আপনি কি কমোনেডস -> সন্ধান করছেন না তা নিশ্চিত? -> কফুন্টরস?
জোশিয়ার

1
@ জোসিয়াহ নো, যতদূর আমি জানি, কমোনেডগুলি মজাদার , কফুন্টর নয়।
পেটর পুদলক

1
সেই অনুপস্থিত অংশটি কি বিভাজ্য নয় ?
Gus

উত্তর:


15

সবার আগে:

যে কোনও মোনাড হ'ল একটি আবেদনকারী ফান্টেক্টর এবং কোনও প্রয়োগকারী ফান্টেক্টর একটি ফান্টেক্টর।

এটি হাস্কেলের প্রসঙ্গে সত্য, তবে ( Applicative"স্ট্রং ল্যাক্স মোনয়েডাল ফান্টেক্টর" হিসাবে পড়া ) সাধারণভাবে নয়, বরং তুচ্ছ কারণেই আপনি বিভিন্ন মনোডিয়াল বিভাগগুলির মধ্যে "প্রয়োগমূলক" ফান্টার রাখতে পারেন, যেখানে মনড (এবং কমোনাদ) এন্ডোফান্টর রয়েছে ।

Applicativeতদ্ব্যতীত, দৃ la় শিথিল মনোঅডিয়াল ফান্ট্যাক্টরগুলির সাথে সনাক্তকরণ কিছুটা বিভ্রান্তিকর, কারণ নামটি ন্যায়সঙ্গত করার জন্য (এবং প্রকারের স্বাক্ষরটি (<*>)) বদ্ধ মনোঅডিয়াল বিভাগগুলির মধ্যে একটি ফান্টারের প্রয়োজন যা একচেটিয়া কাঠামো এবং অভ্যন্তরীণ হোম উভয় সংরক্ষণ করে । এই -এর সম্ভাব্য বলা যেতে পারে একটি "শিথিল monoidal functor বন্ধ", যে ব্যতীত monoidal বদ্ধ শ্রেণীর মধ্যে একটি functor যে সংরক্ষণ পারেন সম্পত্তি সংরক্ষণ অন্যান্য সুস্পষ্ট পথ । কারণ Applicativeশুধুমাত্র endofunctors বর্ণনা Hask এর monoidal গঠন সংরক্ষণের (,), তার দৃষ্টান্ত স্বয়ংক্রিয়ভাবে বৈশিষ্ট্য অনেক লাভ, তাদের সহ শক্তি , যা এইভাবে লুপ্ত করা যেতে পারে।

এর সাথে আপাত সংযোগটি তাত্ক্ষণিকভাবে তাদের স্বতন্ত্র স্তরের কাঠামোর দিকগুলির সাথে মিলিত হওয়ার Monadঅন্তর্নিহিত সীমাবদ্ধতার একটি নিদর্শন, এটি Applicativeএকটি খুশির কাকতালীয় ঘটনা যা দুর্ভাগ্যবশত দ্বৈতকরণ থেকে যায় না।

একটি বিভাগ একটি comonad ঠিক যেমন একটি একসংখ্যা হয় সি পি , একটি oplax monoidal functor সি ডি একটি শিথিল monoidal functor হয় সি পিডি পি । কিন্তু এইচ একটি গুলি পি monoidal নয় বন্ধ , এবং একটি সহ- যে না ফাংশন আবেদন কমই যথার্থতা নাম অন্তর্ভুক্ত। যাইহোক, ফলাফল মারাত্মক আকর্ষণীয় হবে না:CCop CDCopDopHaskopApplicative

class (Functor f) => CoMonoidal f where
    counit :: f () -> ()
    cozip :: f (a, b) -> (f a, f b)

এর পরিবর্তে আমরা "কোলাক্স ক্লোজড ফান্টেক্টর" ধারণাটি কল্পনা করতে পারি, Applicativeএটি যদি বিদ্যমান থাকে তবে আরও অনেক বেশি দেখতে হবে। দুর্ভাগ্যবশত, এ সব একটি বদ্ধ বিভাগ (আমার জানা মতে) নয়: মধ্যে এইচ একটি গুলি morphisms সাথে সঙ্গতিপূর্ণ একটি মধ্যে এইচ একটি গুলি পি কিন্তু একটি হিসাবে কাজ করে না সেখানে অভ্যন্তরীণ Hom - কারণ তীর সহ-ফাংশন কিছু বাছাই পরিবর্তে প্রয়োজন হবে, যা আমরা জন্য সাধারণভাবে সংজ্ঞায়িত করতে পারবে না বিপরীত হয় এইচ একটি গুলি Haskopnewtype Op b a = Op (a -> b)HaskbaHaskopOp b aHask

কেবলমাত্র আমরা যে "colax বদ্ধ functors" সাজা যদি অস্তিত্ত্বকে , এবং উপরন্তু আমরা যেভাবে naively আশা চাই তারা would, একটি সহ- কাজ সম্ভবত ভালো দেখাবে যে উপর ভিত্তি করে:HaskApplicative

class (Functor f) => CoApplicative f where
    copure :: f a -> a
    coap :: (f a -> f b) -> f (a -> b)

যোগ duplicate :: f a -> f (f a)করার copureফলে একটি কমোনাদ তৈরি করা হবে (অবশ্যই আইনগুলি সন্তুষ্ট বলে ধরে নেওয়া হবে)। তবে coap- এবং যাই হোক না কেন - এর মধ্যে সুস্পষ্ট সম্পর্ক নেই extend :: (f a -> b) -> f a -> f b। প্রকারগুলির সাথে তুলনা করলে এটি স্পষ্ট হয়ে ওঠে যে দ্বৈতকরণ বিভিন্নভাবে ঘটছে: কমোনয়েডাল কাঠামোগুলি অন্তর্নিহিত duplicateএবং cozipএকে অপরের সাথে বা এর সাথে coap(যা সম্ভবত কোনওভাবেই বোঝায় না) এর সাথে সামান্য সম্পর্ক রয়েছে , liftA2 (,)এবং (<*>)সমান এবং এর থেকে প্রাপ্ত হতে পারে join

দ্বৈতকরণের আর একটি সম্ভাব্য উপায় Applicative, যার কমোনাদগুলির সাথে আরও কম সম্পর্ক রয়েছে, তা হ'ল বিপরীতমুখী মনোয়েডাল ফ্যান্টেক্টর বিবেচনা করা:

class (Contravariant f) => ContraMonoidal f where
    contraunit :: f a
    contrazip :: f a -> f b -> f (Either a b)

তবে এটি উপরের মত একই বিষয়গুলির অনেকগুলি উপরে চলে, যথা কোনও বদ্ধ শ্রেণির নয়। যদি এটি হয় তবে আমাদের এমন কিছু টাইপ থাকত যা আমরা যেমন ফাংশন লিখতে পারি এবং এর মতোই বাস্তবে প্রত্যাশিতভাবে কাজ করে।Haskopb <~ acontracurry :: (Either c b <~ a) -> (c <~ (b <~ a))contraapply :: b -> Either a (a <~ b)

HaskCoApplicative

তবে, দ্বৈতকরণের জন্য আরও অতিথিপরায়ণ এককথায় বদ্ধ ক্যাটাগরিতে আপনার ভাগ্য ভাল হতে পারে। বিশেষত, আমি বিশ্বাস করি Kleisli (Cont r)এবং এর বিপরীত উভয় বিভাগই একঘেয়ে বন্ধ রয়েছে তাই এই ধারণাগুলি অন্বেষণ করার জন্য এটি আরও ভাল প্রসঙ্গ হতে পারে।


আপনার উত্তরটির তুলনা cstheory.stackexchange.com/a/22302/989 , আপনি অবাক করে দিয়ে পণ্যগুলি দ্বিগুণ করেন না এটি অবাক করে। অবশ্যই, আপনি ঠিক বলেছেন যে হাসকের শ্রেণিবদ্ধ পরিমাণ নেই; তবে আপনি যদি মোট প্রোগ্রামের বিভাগে (আগদার মতো) সীমাবদ্ধ রাখতে ইচ্ছুক হন তবে আসুন এখনই এটির সেট করুন, সেই সমস্যাটি অদৃশ্য হয়ে যায়। (আমি বলছি না যে সেপ্ট অপ্রয়োজনীয় বন্ধ, তবে আমি সন্দেহ করি যে আমি যা বলছি তা বোঝাচ্ছে)।
ব্লেসরব্লেড

8

ভিতরে তাই এই পোস্টে - আমি একটা মজার উত্তর পাওয়া নিষ্পত্তিমূলক functors । আমরা যদি প্রতিস্থাপন ()দ্বারা Void, (,)দ্বারা Either এবং তীর বিপরীত আমরা পাই:

class Functor f => Decisive f where
    nogood :: f Void -> Void
    orwell :: f (Either s t) -> Either (f s) (f t)

ব্লগ পোস্টটি এমন কিছু আইনও দেয় যা সিদ্ধান্ত গ্রহণকারী ফ্যান্ট্যাক্সগুলি মেনে চলেন।

এবং, প্রত্যেকটি Comonadহ'ল Decisive:

instance Comonad c => Decisive c where
    nogood = counit
    orwell story = case counit story of
                     Left s  -> fmap (either id (const s)) story
                     Right t -> fmap (either (const t) id) story 

তাই সিদ্ধান্ত গ্রহণকারী ফান্ট্যাক্টর ফান্টেক্টর এবং কমোনাদের মধ্যে যেমন ফিট হয়, ঠিক তেমনই প্রয়োগমূলক ফান্ট্যাক্টরা ফান্টেক্টর এবং ম্যানডের মধ্যে ফিট করে।


6

ম্যাকব্রাইড এবং প্যাটারসন (বিভাগ 7) দেখায় যে একটি প্রয়োগমূলক ফান্টেক্টর, যা একটি আইডিয়াম হিসাবেও পরিচিত, এটি একটি শক্তিশালী লক্ষ্মী মনোয়েডাল ফ্যাক্টর । আপনি একটি খুঁজছেন শক্তিশালী colax monoidal functor এছাড়াও একটি নামে পরিচিত শক্তিশালী oplax monoidal functor । একটি মন্তব্যে উল্লিখিত হিসাবে, একটি ওপ্লেক্স মনোয়েডাল ফ্যাক্টর হ'ল বিপরীত বিভাগগুলির মধ্যে একটি শিথিল মনোফিডাল ফান্টেক্টর, যা শেষ হয়ে যায় এক শিথিল মনোয়েডাল ফান্টারের কমোনয়েডাল সংস্করণ হিসাবে।

চিত্রগুলি আঁকুন, তীরটি বিপরীত করুন!

এটি কী তা দেখার জন্য এবং এটিকে কার্যকরী প্রোগ্রামিং ধারণায় অনুবাদ করার জন্য আমাকে কিছুটা সময় ব্যয় করতে হবে।


কোনও কারণে মানক শব্দটি "ওপ্লেক্স মনোয়েডাল ফ্যাক্টর" বলে মনে হয়। ধারণাটি হ'ল বিপরীত বিভাগগুলির মধ্যে একটি শিথিল মনোফিডাল ফান্টেক্টর, যা শেষ হয়ে যায় এক লক্ষ্মী মনোয়েডাল ফান্টারের কমোনয়েডাল সংস্করণ। "কোলাক্স কমোনয়েডাল" ব্যবহার করা হয় নিরর্থক বা "ল্যাক্স মনোয়েডাল" এর সমতুল্য।
সিএ ম্যাকক্যান

আমি "কো" -ইংকে ছাড়িয়ে গেলাম। আমি আমার উত্তর ঠিক করব।
ডেভ ক্লার্ক 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.