2015-04-18 5 views

उत्तर

30

देखो:

\x -> (x, x) :: a -> (a, a) 

(,)   :: a -> b -> (a, b) 

join   :: Monad m => m (m a) -> m a 

यह ध्यान देने योग्य है कि ((->) r)Monad typeclass का एक उदाहरण है। इसलिए, विशेषज्ञता पर:

join   :: (r -> r -> a) -> (r -> a) 

क्या join कार्यों के लिए करता है वही तर्क को दो बार दिए गए समारोह लागू है:

join f x = f x x 

-- or 

join f = \x -> f x x 

इससे हम तुच्छता से देख सकते हैं:

join (,) = \x -> (,) x x 

-- or 

join (,) = \x -> (x, x) 

QED।

22

मुझे एडिट्स सहज ज्ञान पसंद है। यहां बताया गया है कि मैं स्रोत कोड पढ़कर इसे कैसे समझूंगा।

  1. मैं Hoogle
  2. मैं join
  3. के लिए खोज करने के लिए जाना मैं click on join
  4. मैं the source code for join
  5. मुझे लगता है कि join x = x >>= id
  6. तो मुझे लगता है कि पता करने के लिए प्राप्त करने के लिए "स्रोत" बटन पर क्लिक करें join (,) = (,) >>= id
  7. I search for >>= on Hoogle and click the link
  8. मुझे लगता है कि यह इकाई typeclass का हिस्सा है, और मैं जानता हूँ कि मैं (,) एक समारोह है जो के साथ काम कर रहा हूँ, इसलिए मैं click "source" on the Monad ((->) r) instance
  9. मुझे लगता है कि f >>= k = \r -> k (f r) r
  10. जब से हम f = (,) और k = id है, हम \r -> id ((,) r) r मिल
  11. Sooo ... नया फ़ंक्शन! id! मुझे लगता है कि Hoogle पर खोज सकते हैं और click through to its source code
  12. id x = x
  13. बजाय join (,) की अब हम \r -> ((,) r) r
  14. कौन कौन सा \r -> (r,r)
के रूप में एक ही बात है के रूप में \r -> (,) r r
  • एक ही बात है बाहर कर देता है

    कभी भी यह न भूलें कि हैडॉक्स लाइब्रेरी के स्रोत कोड से लिंक करते हैं। यह समझने की कोशिश करते समय कि चीजें कैसे काम करती हैं, यह बेहद उपयोगी है।

  • +3

    यह शुरुआती लोगों के लिए सुंदर है।इस तरह के उत्तरों को लिखना नवागंतुकों के लिए बेहद उपयोगी है। –

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