2015-12-07 15 views
7

हास्केल में, आप कोड के बिट्स को साफ करने के लिए $ ऑपरेटर का उपयोग कर सकते हैं, माता-पिता की आवश्यकता को हटा सकते हैं।

क्या एएलएम इस ऑपरेटर का समर्थन करता है, या ऐसा कुछ?

मैं इसे स्वयं परिभाषित कर सकता हूं लेकिन मुझे आशा थी कि यह कुछ अंतर्निहित था।

यहाँ यह कैसे काम करता है:

import Html 
import List exposing (map, foldr) 

datas = [("a", 1), ("b", 2), ("c", 3)] 

{--} 
($) : (a -> b) -> (a -> b) 
($) a b = a b 
infixr 0 $ 
--} 

main = 
    {-- replace all these parens 
    Html.text (toString (foldr (++) "" (map fst datas))) 
    --} 
    Html.text $ toString $ foldr (++) "" $ map fst datas 

उत्तर

12

हाँ, हम <| बजाय $ का उपयोग करें। हमने . और फ़्लिप किए गए संस्करण >> के लिए फ़्लिप किए गए संस्करण |> और << के साथ इसे F # से उधार लिया।
इन्हें पेश करने के बाद, लोगों ने स्वाभाविक रूप से 'पाइपलाइनिंग' नामक शैली की ओर अग्रसर किया, जहां आप |> ऑपरेटर का उपयोग करके कुछ डेटा लेते हैं और इसे दो चरणों में बदल देते हैं। इन दिनों यह <| का उपयोग करने से एल्म कोड में एक अधिक आम कोड पैटर्न है।

उदाहरण के लिए:

update : (Float, Keys) -> Model -> Model 
update (dt, keys) mario = 
    mario 
    |> gravity dt 
    |> jump keys 
    |> walk keys 
    |> physics dt 

(Mario example on the website से लिया)

+1

अच्छा लगा। मैंने इसे दस्तावेज़ों में देखा था लेकिन कनेक्शन नहीं बनाया था कि आप इस तरह से सामान को कैसे साफ कर सकते हैं। मैं निश्चित रूप से '|>' का उपयोग करना चाहता हूं और '$ 'से आगे अपना कोड पढ़ना चाहता हूं और मुझे अपना कोड पीछे से –

+0

भी पढ़ना है, इसे क्लोजर में" थ्रश "ऑपरेटर कहा जाता है, लेकिन इसे घुमावदार कार्यों पर एक इंफिक्स ऑपरेटर लागू किया गया है एक मैक्रो के बजाय। –

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