2015-05-16 7 views
8

दूसरे दिन मैं ऑपरेटर, -< पर आया, जो एक मोनैड में एक चर के लिए बाध्यकारी के संदर्भ में दिखाई देता है; विशेष रूप से, ऐसा लगता है कि यह एक फ़ंक्शन के लिए एक मान पास करता है जिसे तब एक मोनैड के दायरे में मौजूद चर के लिए असाइन किया गया है (और संभवतः मूल्यांकन किया गया?)।क्या बिल्ली है "- <", वैसे भी?

उदाहरण उपयोग:

myMonad = do 
    myVar <- f -< x 

इस बारे में कुछ सवाल: सबसे पहले, यह क्या कहा जाता है? ऑपरेटर स्वयं गैर-googleable है (Google को < या > पसंद नहीं है), और एक नाम जो मैंने पाया है, "arrow application", आमतौर पर the other kind of Arrow present in Haskell से लिंक होता है, जो असंबंधित प्रतीत होता है।

दूसरा, इस ऑपरेटर को वहां के अधिकांश शिक्षण संसाधनों में क्यों समझाया नहीं गया है? न तो "मोनाड्स के लिए सज्जन परिचय" और न ही LYAH इसे उत्तीर्ण उल्लेख के रूप में बहुत कुछ देता है, और हास्केल ऑपरेटरों की अधिकांश सूचियां भी इससे गुजरती हैं। (क्या यह बुरा अभ्यास माना जाता है?)

अंत में, यह (myVar <- f -< x) == (myVar <- (f x)) में ब्रांड्स का उपयोग करने के बराबर है? या यह let myVar = (f x) का उपयोग करने की तरह है? किसी भी मामले में, यदि इसका उपयोग किया जाता है, तो -< का उपयोग माता-पिता या $ पर क्यों करें?

+1

प्रतीकों की खोज करते समय, [hoogle] (https://www.haskell.org/hoogle/?hoogle=-%3C) और [hayoo] (http://hayoo.fh-wedel.de/?query = -% 3 सी) आपके दोस्त हैं। – rampion

उत्तर

16

हां, यह वही प्रकार का तीर है। तीरों के लिए चीनी वाक्यविन्यास है जैसे मोनैड के लिए चीनी वाक्यविन्यास है। आप -< की खोज के लिए Google का उपयोग नहीं कर सकते हैं, लेकिन आप Hoogle का उपयोग कर सकते हैं।

देखें: GHC Language Features, Arrow tutorial

तीर वाक्यविन्यास वास्तव में खराब दस्तावेज है। -< के बजाय $ का उपयोग नहीं करने का कारण यह है कि -< तीर में शुद्ध मान इंजेक्ट करता है, लेकिन -> तीर का केवल एक उदाहरण है। तो, $ यदि आपका तीर -> है तो ठीक काम करता है। मोनैडिक तीर भी हैं (Kleisli कन्स्ट्रक्टर उनको बनाता है) और आप अपने स्वयं के तीर बना सकते हैं, और इन मामलों में -< अलग है।

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