2015-12-05 6 views
11

उदाहरण के लिए, इस जाँचलैम्ब्डा में ऑपरेटरों को infixities कैसे देना है?

\cons nil -> 5 `cons` 3 `cons` nil 

टाइप नहीं है और न ही हालांकि इन दोनों को करना

\cons nil -> 5 `cons` nil 
\(#) nil -> 5 # nil 

इस

\(#) -> 5 # 3 # nil 

करता है वहाँ lambdas में ऑपरेटरों को infixites आवंटित करने के लिए एक रास्ता है । मैंने कोशिश की

infixr 5 # 
foo = \(#) nil -> 5 # 3 # nil 

जो # की कोई परिभाषा के लिए एक त्रुटि देता है और

foo = \(infixr 5 #) nil -> 5 # 3 # nil 

जो सिर्फ एक सिंटैक्स त्रुटि है।

मैं क्या कर सकता हूं?

उत्तर

16

स्थिरता घोषणाओं स्थानीय हो सकता है लेकिन परिभाषाओं के साथ करना होगा, ताकि आप

कुछ की तरह
foo cons nil = 'a' # 'b' # nil 
    where (#) = cons 
     infixr 5 # 

या

foo = \cons nil -> let (#) = cons; infixr 5 # in 'a' # 'b' # nil 

आदि

+4

अच्छा वास्तव में लिखने के लिए होगा! क्या Haskell98, Haskell2010, या सिर्फ जीएचसी का यह हिस्सा है? – leftaroundabout

+1

मुझे विशेष रूप से लेट संस्करण पसंद है। – PyRulez

+1

यह हास्केल 98 है। चलो और कहां शामिल है वाक्य "वाक्य", जिसमें प्रकार हस्ताक्षर, स्थिरता घोषणाएं और कार्य और पैटर्न बाइंडिंग शामिल हैं। –

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