जबकि सोच क्या और अधिक उपयोगी मानक वर्ग का सुझाव देने के to this oneद्वि-कॉमोनैड के तरीके क्या होंगे?
class Coordinate c where
createCoordinate :: x -> y -> c x y
getFirst :: c x y -> x
getSecond :: c x y -> y
addCoordinates :: (Num x, Num y) => c x y -> c x y -> c x y
यह मुझे हुआ है कि कुछ VectorSpace
-y या R2
, के बजाय एक नहीं बल्कि अधिक सामान्य जानवर यहां घात में रहना हो सकता है: एक Type -> Type -> Type
जिसका दो निहित प्रकार दोनों निकाला जा सकता है। एचएम, शायद वे extract
एड हो सकते हैं?
न तो comonad
और न ही bifunctors
पैकेज में Bicomonad
नामक कुछ शामिल है। सवाल यह है कि, क्या ऐसी कक्षा भी समझदारी होगी, श्रेणी-सैद्धांतिक रूप से? Bimonad
के विपरीत (जो भी परिभाषित नहीं है, और मैं वास्तव में कैसे दिखाई दे सकती दिखाई दे रहे हैं), एक सीधी सादी परिभाषा प्रशंसनीय लगता है:
class Bifunctor c => Bicomonad c where
fst :: c x y -> x
snd :: c x y -> y
bidup :: c x y -> c (c x y) (c x y)
शायद कानूनों
fst . bidup ≡ id
snd . bidup ≡ id
bimap fst snd . bidup ≡ id
bimap bidup bidup . bidup ≡ bidup . bidup
साथ
लेकिन मैं इसे खोजने निराशाजनक है कि bidup
के परिणाम के दोनों क्षेत्रों में एक ही प्रकार होता है, और वहां कई अन्य, शायद "बेहतर" कल्पना करने योग्य हस्ताक्षर होते हैं।
किसी भी विचार?
कोई जवाब नहीं है, लेकिन: ए (सह) मोनैड ** एंडो ** मज़ेदारों की श्रेणी में केवल एक (सह) मोनोइड (टेंसर उत्पाद के रूप में फ़ैक्टर उत्पाद के साथ) है, है ना? हास्केल बिफुनक्टर एंडोफंक्टर नहीं हैं। तो मुझे यकीन नहीं है कि वास्तविक द्वि (सह) मोनड कैसा दिखता है, या यहां तक कि अगर यह bifunctors के शीर्ष पर ऐसी चीज बनाने के लिए समझ में आता है। लेकिन शायद अभी भी कुछ उपयोगी है जो एक बिकोनोनाड "थोड़े जैसा" दिखता है, इसलिए यह अभी भी एक दिलचस्प सवाल है। –