traverseचीजों को "अंदर" चीजों Traversableमें बदल देता है , एक ऐसा कार्य दिया Traversableजाता है Applicative, Applicativeजो चीजों से बाहर हो जाता है।
के Maybeरूप में उपयोग करते हैं Applicativeऔर के रूप में सूची Traversable। पहले हमें परिवर्तन समारोह की आवश्यकता है:
half x = if even x then Just (x `div` 2) else Nothing
इसलिए यदि कोई संख्या सम है, तो हम उसका आधा (अंदर Just), दूसरे को प्राप्त करते हैं Nothing। यदि सब कुछ "अच्छी तरह से" चला जाता है, तो यह इस तरह दिखता है:
traverse half [2,4..10]
--Just [1,2,3,4,5]
परंतु...
traverse half [1..10]
-- Nothing
कारण यह है कि <*>फ़ंक्शन का उपयोग परिणाम बनाने के लिए किया जाता है, और जब कोई तर्क होता है Nothing, तो हम Nothingवापस आ जाते हैं।
एक और उदाहरण:
rep x = replicate x x
यह फ़ंक्शन xसामग्री के साथ लंबाई की एक सूची बनाता है x, जैसे rep 3= [3,3,3]। का परिणाम क्या है traverse rep [1..3]?
हमें आंशिक परिणाम मिलते हैं [1], [2,2]और [3,3,3]उपयोग करते हैं rep। अब सूचियों का शब्दार्थ Applicatives"सभी संयोजनों को लेना" है, उदाहरण के (+) <$> [10,20] <*> [3,4]लिए [13,14,23,24]।
"सभी संयोजन" [1]और [2,2]दो बार हैं [1,2]। दो बार के सभी संयोजन [1,2]और [3,3,3]छह बार हैं [1,2,3]। तो हमारे पास:
traverse rep [1..3]
--[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]