fmap करने के लिए हास्केल की लेंस लाइब्रेरी का उपयोग करें नीचे दिए गए कोड में, मेरा प्रश्न शीर्ष-सबसे अधिक फ़ंक्शन someFunc
से संबंधित है (नीचे सब कुछ सिर्फ एक पूर्ण उदाहरण प्रदान करने के लिए है)। मैं एक रिकॉर्ड-सिंटैक्स गेटर और fmap
का उपयोग करता हूं। someFunc
को लागू करने के लिए लेंस तरीका क्या है?लेंस
import Control.Lens
import Data.IntMap (IntMap)
someFunc :: Farm -> IntMap Size
someFunc farm =
_barnSize <$> farm ^. farmBarns
data Farm = Farm
{ _farmBarns :: IntMap Barn
}
farmBarns :: Lens' Farm (IntMap Barn)
farmBarns = lens _farmBarns (\farm barns -> farm { _farmBarns = barns })
type Size = (Int, Int)
data Barn = Barn
{ _barnSize :: Size
}
barnSize :: Lens' Barn Size
barnSize = lens _barnSize (\barn size -> barn { _barnSize = size })
आपका पहला सुझाव सरल और पठनीय है। –
@ ruben.moor मैंने चौथी संभावना को जोड़ा, हालांकि मुझे नहीं लगता कि यह पहले की तुलना में बेहतर है। – duplode