2016-11-27 14 views
11

जबकि सोच क्या और अधिक उपयोगी मानक वर्ग का सुझाव देने के 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 के परिणाम के दोनों क्षेत्रों में एक ही प्रकार होता है, और वहां कई अन्य, शायद "बेहतर" कल्पना करने योग्य हस्ताक्षर होते हैं।

किसी भी विचार?

+2

कोई जवाब नहीं है, लेकिन: ए (सह) मोनैड ** एंडो ** मज़ेदारों की श्रेणी में केवल एक (सह) मोनोइड (टेंसर उत्पाद के रूप में फ़ैक्टर उत्पाद के साथ) है, है ना? हास्केल बिफुनक्टर एंडोफंक्टर नहीं हैं। तो मुझे यकीन नहीं है कि वास्तविक द्वि (सह) मोनड कैसा दिखता है, या यहां तक ​​कि अगर यह bifunctors के शीर्ष पर ऐसी चीज बनाने के लिए समझ में आता है। लेकिन शायद अभी भी कुछ उपयोगी है जो एक बिकोनोनाड "थोड़े जैसा" दिखता है, इसलिए यह अभी भी एक दिलचस्प सवाल है। –

उत्तर

1

यह कोई जवाब नहीं है, लेकिन Bimonad के लिए, इस बारे में कैसे?

class Biapplicative p => Bimonad p where 
    (>>==) :: p a b -> (a -> b -> p c d) -> p c d 

biap :: Bimonad p => p (a -> b) (c -> d) -> p a c -> p b d 
biap p q = p >>== \ab cd -> q >>== \a c -> bipure (ab a) (cd c) 

instance Bimonad (,) where 
    (a,b) >>== f = f a b 

अगर यह स्पष्ट रूप से सही/दिलचस्प, या यहाँ तक कि दूर से उपयोगी है मैं नहीं जानता, लेकिन यह सही एक हास्केल के नजरिए से बदबू आ रही है। क्या यह आपके Bicomonad या कुछ समान है?

+2

सुनिश्चित नहीं है; यह सामान्य 'मोनाद' की तरह दिखता है जो तर्कों को ट्यूबल करने के लिए प्रतिबंधित है (जो तब curried हैं)। – leftaroundabout

+0

@ बाएंराउंडबाउट सहमत। मुझे आश्चर्य है, यद्यपि, यदि आपका बायोमोनाड एक कॉमोनैड से अलग है, तो तर्कसंगत तर्कों तक सीमित है। – chi

+0

@ बाएंराउंडबाउट, क्या यह लगभग 'बायप्प्लिकेटिव' के बारे में भी सच नहीं है (यदि आप 'कॉन्स्ट'' जैसे उबाऊ फ़ैक्टर को बहिष्कृत करते हैं? – dfeuer

संबंधित मुद्दे