2016-10-06 41 views
5

होगल के अनुसार, <=< (क्लेस्ली मोनाड संरचना, या "बाएं मछली") की फिक्स्डिटी और =<< (रिवर्स मोनैड बाइंड) infixr 1 है। मैं उन पर सही ढंग से देख रहा हूँ, तो एक अभिव्यक्ति की तरह, का कहना है किहास्केल/फ्रीज <= <और = << एसोसिएटिविटी

print <=< return =<< return "foo" 

अमान्य होना चाहिए, क्योंकि यह समान रूप से अमान्य

print <=< (return =<< return "foo") 

को लेकिन किसी कारण से बराबर किया गया है यद्यपि पहली अभिव्यक्ति हास्केल में अमान्य प्रतीत होती है, जैसा कि अपेक्षित है, फ्रीज को कोई शिकायत नहीं है, और से पहले <=< का मूल्यांकन करता है।

मैं इस जब मैं pointfree.io पर चारों ओर खिलवाड़ किया गया था की खोज की यह पता लगाने कैसे

foo >>= (bar <=< baz) 

बिंदु से मुक्त की तरह कुछ बनाने के लिए करने के लिए, और यह मेरे

bar <=< baz =<< foo 

दिया जो ऐसा नहीं करता फिक्सिटी पर विचार करते हुए, बिल्कुल सही दिखें।

उत्तर

6

फ्रीज हैस्केल की तरह है, लेकिन फ्रीज हास्केल नहीं है। और फ्रीज में, उन ऑपरेटरों की फिक्स्डियां अलग-अलग हैं: =<< is infixr 2 और <=< is infixr 3। इसलिए <=< की निम्न प्राथमिकता है, bar <=< baz =<< foo स्वाभाविक रूप से (bar <=< baz) =<< foo के रूप में पार्स किया गया है।

(वास्तव में, =<< और <=< अलग प्रकार फ्रेज में की तुलना में वे हास्केल में क्या है: एक Monad बाधा के बजाय, वे एक Bind बाधा है, जहां Bind बिना pure/returnMonad की तरह है।)


के रूप में "JVM के लिए एक हास्केल"

हाँ, Frege describes itself, लेकिन वे इस अर्थ में कि कॉमन लिस्प एक लिस्प है, और योजना एक लिस्प है, और Clojure एक लिस्प है में "एक हास्केल" मतलब है। इस तरह से उपयोग किए जाने वाले "हास्केल" को देखना अजीब है; "JVM के लिए एक हास्केल जैसी भाषा", या कुछ मजबूत देखने के लिए यह अधिक सामान्य होगा। लेकिन फ्रीज इतना समान है कि मैं देख सकता हूं क्यों।


इसके अलावा, आप सही कर रहे हैं: कि करता pointfree में (प्रोग्राम है जो pointfree.io पीठ) एक बग होने के लिए दिखाई देते हैं! pointfreeहास्केल कोड उत्पन्न करना है, न कि फ़्रेज, इसलिए तथ्य यह है कि परिवर्तन अमान्य है इसका मतलब है कि यह गलत काम कर रहा है।

+2

फ्रीज में प्रकार भिन्नता शायद इसलिए है क्योंकि एएमपी (या यहां तक ​​कि एक और अधिक कट्टरपंथी मोनाद वर्ग पदानुक्रम) जीएचसी में किए जाने से कुछ साल पहले ही शुरू से ही लागू किया गया था। मैं आपको इस बात पर विचार करने के लिए कहता हूं कि इस जमीन पर "हास्केल संपत्ति" फ्रीज को अस्वीकार करना उचित है या नहीं। इस मजबूत अर्थ में, कोई पोस्ट-एएमपी हास्केल प्रोग्राम वास्तव में हास्केल में लिखा नहीं गया है। यह कोई मतलब नहीं है, IMHO। (यह सुनिश्चित करने के लिए, मुझे पता है कि फ्रेज को पूर्ण हास्केल-शिप से इनकार करने के अन्य कारण हैं।) – Ingo

+0

@ इंगो: मैं कहने का प्रयास कर रहा था कि "फ्रीज हास्केल नहीं है, इसलिए यह आश्चर्यजनक है कि यह अलग होगा; और वास्तव में, यह इन तरीकों से अलग है।"दूसरे शब्दों में, मैं कारणता को दूसरी तरफ रखूंगा :-)" हास्केल प्रॉपर्टी "टिप्पणी अंग्रेजी भाषा के उपयोग के बारे में एक टिप्पणी थी: फ्रीज एकमात्र भाषा है जिसे मैंने" हास्केल "के रूप में वर्णित देखा है, इसलिए यह है इसका वर्णन करने का एक असामान्य तरीका है, और मैंने सोचा कि भ्रम के संभावित स्रोत के रूप में कॉल करना महत्वपूर्ण था। –

+1

मुझे यह मानना ​​है कि मैं "JVM के लिए Haskell" नारा से 100% खुश नहीं हूं, यह एक कारण है मैं पहली जगह में एक अलग नाम क्यों चुनता हूं। लेकिन वास्तव में यह स्वयं एसपीजे था जिसने हमें इस संबंध में अधिक आक्रामक होने के लिए प्रोत्साहित किया, (नगण्य के रूप में मौजूदा) मतभेदों को खारिज कर दिया। मैं यह भी मानता हूं कि "ए" थोड़ा सा हो सकता है परेशान करना। – Ingo

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