2013-08-25 16 views
8

, bu temel kayıt erişimcileri kullanmadan yeni bir kayıt oluşturmak mümkündür?Lensler kullanarak yeni bir kayıt oluşturmak mümkün mü? Ben merceklerle rekor türü varsa

{-# LANGUAGE TemplateHaskell #-} 

import Control.Lens 
import Control.Lens.TH 

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

makeLenses ''Foo 

Ben FooData.Default örneğidir yapmak ve daha sonra lensler ile def modifiy, ama hepsi değil kayıt türleri mantıklı varsayılan olacaktır başladı. Control.Lens'in bunu yapmak için kendi yolu var mı?

+3

Hep 'Foo {}' varsayılan olarak, tanımsız tüm alanları bırakarak kullanabilirsiniz. –

+0

Teşekkürler! Oradaki alanları çıkarabileceğini bile bilmiyordum. Ben sadece * varsaydık * bir derleme hatası olur. –

+5

Not: Foo'nun sıkı alanları varsa bu işe yaramaz. – shachaf

cevap

6

Hayır, şu anda bunu yapmak için hiçbir yolu yoktur. Varsayılan olarak Foo{} gibi bir şey kullanabilir veya kayıt inşaat için lens kullanmayan gerekecek. Bununla birlikte, bunu kaplayan bir lensde zaten issue bulunmaktadır.

+0

Github biletine bağlantı için teşekkürler. Orada bazı ilginç tartışmalar! –