मेरे पास में उपयोग किए जाने वाले प्रकार की प्रकृति के बारे में सैद्धांतिक प्रश्न है जो कोयोनोना लेम्मा को समझाते हुए कई उदाहरण हैं। उन्हें आम तौर पर को "प्राकृतिक परिवर्तन" के रूप में संदर्भित किया जाता है जो कि मेरे ज्ञान के लिए मज़दूरों के बीच मैपिंग के लिए होता है। मुझे कौन सा पहेली है कि इन उदाहरणों में वे कभी-कभी Set
से कुछ मज़ेदार F
पर मानचित्र करते हैं। तो यह वास्तव में functors के बीच एक मैपिंग होने के लिए semm नहीं है, लेकिन कुछ और अधिक आराम से।क्या "प्राकृतिक परिवर्तन" हम वास्तव में "प्राकृतिक परिवर्तन" प्राप्त करने के लिए कोयोनिया पर लागू होते हैं?
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
module Coyo where
import Data.Set (Set)
import qualified Data.Set as Set
data Coyoneda f a where
Coyoneda :: (b -> a) -> f b -> Coyoneda f a
instance Functor (Coyoneda f) where
fmap f (Coyoneda c fa) = Coyoneda (f . c) fa
set :: Set Int
set = Set.fromList [1,2,3,4]
lift :: f a -> Coyoneda f a
lift fa = Coyoneda id fa
lower :: Functor f => Coyoneda f a -> f a
lower (Coyoneda f fa) = fmap f fa
type NatT f g = forall a. f a -> g a
coyoset :: Coyoneda Set Int
coyoset = fmap (+1) (lift set)
applyNatT :: NatT f g -> Coyoneda f a -> Coyoneda g a
applyNatT n (Coyoneda f fa) = Coyoneda f (n fa)
-- Set.toList is used as a "natural transformation" here
-- while it conforms to the type signature of NatT, it
-- is not a mapping between functors `f` and `g` since
-- `Set` is not a functor.
run :: [Int]
run = lower (applyNatT Set.toList coyoset)
मैं यहाँ क्या गलत समझ रहा हूँ:
यहाँ प्रश्न में कोड है?
संपादित करें: फ्रीनोड में # हास्केल पर चर्चा के बाद मुझे लगता है कि मुझे अपने प्रश्न को थोड़ा स्पष्ट करने की आवश्यकता है। यह मूल रूप से है: "Set.toList
श्रेणी सैद्धांतिक अर्थ में क्या है? चूंकि यह स्पष्ट रूप से (?) प्राकृतिक परिवर्तन नहीं है"।
इंजेक्शन उपश्रेणी पर, यहां तक कि 'toList' भी एक प्राकृतिक परिवर्तन है। – leftaroundabout
उत्तर के लिए धन्यवाद! तो 'n'' और' n' यहां एक सेक्शन/रीट्रैक्शन जोड़ी बनाते हैं? – raichoo
@raichoo हां, 'n' और' n ''n' के बाद सेक्शन/रीट्रैक्शन जोड़े का पूरा परिवार हैं। एन == आईडी'। सभी अनुभाग/पीछे हटने वाले जोड़े मजबूत कानून 'एन' का पालन नहीं करेंगे। एफएमएपी एफ एन == एफएमएपी एफ'। – Cirdec