2013-08-25 4 views
8

यदि मेरे पास लेंस के साथ एक रिकॉर्ड प्रकार है, तो क्या अंतर्निहित रिकॉर्ड एक्सेसर्स का उपयोग किए बिना एक नया रिकॉर्ड बनाना संभव है?क्या लेंस का उपयोग करके एक नया रिकॉर्ड बनाना संभव है?

{-# LANGUAGE TemplateHaskell #-} 

import Control.Lens 
import Control.Lens.TH 

data Foo = Foo { _s :: String 
       , _b :: Bool 
       } deriving (Show, Eq) 

makeLenses ''Foo 

मैं FooData.Default का एक उदाहरण बना सकता है और फिर लेंस के साथ def modifiy, लेकिन सभी रिकॉर्ड प्रकारों समझदार चूक होगा। नियंत्रण करता है। लेंस के पास ऐसा करने का अपना तरीका है?

+3

आप हमेशा डिफ़ॉल्ट रूप से 'Foo {}' का उपयोग कर सकते हैं, सभी फ़ील्ड को अपरिभाषित छोड़कर। –

+0

धन्यवाद! मुझे यह भी पता नहीं था कि आप वहां खेतों को छोड़ सकते हैं। मैं बस * माना * यह एक संकलन त्रुटि होगी। –

+5

ध्यान दें कि यदि 'Foo' में सख्त फ़ील्ड हैं तो यह काम नहीं करेगा। – shachaf

उत्तर

6

नहीं, वर्तमान में ऐसा करने का कोई तरीका नहीं है। आपको Foo{} जैसे कुछ डिफ़ॉल्ट रूप से उपयोग करना होगा या रिकॉर्ड निर्माण के लिए लेंस का उपयोग नहीं करना होगा। हालांकि, इसमें लेंस में पहले से ही issue है।

+0

जिथब टिकट के लिंक के लिए धन्यवाद। वहां कुछ दिलचस्प चर्चा! –

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