Functor
के रूप में परिभाषित किया गया है
class Cofunctor f where
cofmap :: (b -> a) -> (f b -> f a)
तो, दोनों तकनीकी रूप से ही कर रहे हैं, और यही कारण है Cofunctor
मौजूद नहीं है है। "सामान्य में 'मज़ेदार' की दोहरी अवधारणा अभी भी 'सामान्य रूप से मजेदार' है।
चूंकि Functor
और Cofunctor
समान हैं, दोनों monads और comonads को Functor
का उपयोग करके परिभाषित किया गया है। लेकिन यह आपको ऐसा नहीं लगता कि मोनैड और कॉमोनैड एक ही बात हैं, वे नहीं हैं।
class Functor m => Monad where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
एक comonad (फिर से, सरलीकृत) है या नहीं:
एक इकाई के रूप में परिभाषित (सरल बनाने) है
class Functor w => Comonad where
extract :: w a -> a
extend :: (w a -> b) -> w a -> w b
नोट "समरूपता"। ,
import Data.Functor.Contravariant
class Contravariant f where
contramap :: (b -> a) -> (f a -> f b)
स्रोत
2016-01-11 22:59:52
ऐसा इसलिए है क्योंकि एक cofunctor एक functor के रूप में ही है। दोनों के बीच कोई अंतर नहीं है। हालांकि, monads और comonads अलग हैं। यद्यपि एक contravariant functor के रूप में ऐसी चीज है, हालांकि 'contramap' विधि के साथ जिसमें' contravariant f => (a -> b) -> f b -> f a' प्रकार है। हालांकि, यह एक कोफंक्टर के समान नहीं है। –
क्या आपका मतलब है "कोफंक्टर" एक मज़ेदार के दोहरे (जो कि केवल एक मज़ेदार है, क्योंकि यह स्वयं-दोहरी है), या एक मज़ेदार का मतलब है जो contravariant है? http://math.stackexchange.com/questions/394472/is-cofunctor-an-accepted-term-for-contravariant-functors –