2017-01-07 7 views
6

Maybe (Lens' a b) जैसे एक प्रकार काम नहीं करता है क्योंकि Lens' एक रैंक-2 प्रकार के हुड के नीचे है, जिसे -XImpredicativeTypes एक्सटेंशन (जो वास्तव में जीएचसी में समर्थित नहीं है) के बिना एक प्रकार के कन्स्ट्रक्टर में लपेटा नहीं जा सकता है।गैर-अपरिवर्तनीय रूप से 'लेंस' वापस कैसे लौट सकता है?

क्या इस प्रकार सबसे अच्छा प्रकार एक समारोह है कि नैतिक रूप से प्रकार

foo :: A -> Maybe (Lens' B C) 

एक संभावना एक से पारित कर दिया निरंतरता

foo' :: ∀ y . A -> (Lens' B C -> y) -> Maybe y 

में Maybe स्थगित करने होगा होता देने के लिए है, लेकिन मुझे नहीं पता खासकर उस तरह।

+0

उपयोग [ 'ALens'] (https://hackage.haskell.org/package/lens-4.15.1/docs/Control-Lens-Lens.html#t:ALens) हो सकता है? –

+0

'ReifiedLens' भी है जो केवल सामान्य न्यूटाइप रैपर है।' लेंस 'को बढ़ाएं। जब आप एक लेंस लौट रहे हैं तो 'एलेंस 'की तुलना में' ReifiedLens' का उपयोग करने के लिए यह अधिक कुशल हो सकता है, और यह उपभोक्ता के लिए समान रूप से सुविधाजनक लगता है। –

उत्तर

6

यह Control.Lens.Reified मॉड्यूल के लिए है। इसमें रैपर lens पदानुक्रम के लिए हैं।

foo :: A -> Maybe (ReifiedLens' B C) 
संबंधित मुद्दे