2013-08-25 23 views
8

Nếu tôi có loại bản ghi với ống kính, bạn có thể tạo bản ghi mới mà không sử dụng các trình truy cập bản ghi cơ bản không?Có thể xây dựng một kỷ lục mới bằng cách sử dụng Ống kính không?

{-# LANGUAGE TemplateHaskell #-} 

import Control.Lens 
import Control.Lens.TH 

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

makeLenses ''Foo 

tôi thể làm Foo một thể hiện của Data.Default và sau đó modifiy def với ống kính, nhưng không phải tất cả các loại hồ sơ sẽ có giá trị mặc định hợp lý. Control.Lens có cách riêng để làm điều đó không?

+3

Bạn luôn có thể sử dụng 'Foo {}' làm mặc định, để lại tất cả các trường không xác định. –

+0

Cảm ơn! Tôi thậm chí không biết bạn có thể bỏ qua các lĩnh vực ở đó. Tôi chỉ * giả định * nó sẽ là một lỗi biên dịch. –

+5

Lưu ý rằng thao tác này sẽ không hoạt động nếu 'Foo' có các trường nghiêm ngặt. – shachaf

Trả lời

6

Không, hiện tại không có cách nào để thực hiện việc đó. Bạn sẽ phải sử dụng một cái gì đó như Foo{} làm mặc định hoặc không sử dụng ống kính để tạo bản ghi. Tuy nhiên, đã có một ống kính issue che phủ điều này.

+0

Cảm ơn bạn đã liên kết đến vé github. Một số cuộc thảo luận thú vị ở đó! –

Các vấn đề liên quan