Если у меня есть тип записи с линзами, можно ли создать новую запись без использования базовых средств доступа к записям?
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
import Control.Lens.TH
data Foo = Foo { _s :: String
, _b :: Bool
} deriving (Show, Eq)
makeLenses ''Foo
Я мог бы сделать Foo
экземпляром Data.Default
, а затем изменить def
с помощью линз, но не все типы записей будут иметь разумные значения по умолчанию. Есть ли у Control.Lens собственный способ сделать это?
Foo{}
по умолчанию, оставив все поля неопределенными. - person Sjoerd Visscher   schedule 25.08.2013Foo
содержит строгие поля. - person shachaf   schedule 25.08.2013Default
, и поэтому, вероятно, это правильный путь, чтобы избежать хрупкого кода. - person Peter Hall   schedule 26.08.2013data Foo a = Foo { _x, _y :: a }
линзыx
иy
по отдельности не могут изменить тип, так как вы должны изменить поляx
иy
одновременно. - person shachaf   schedule 27.08.2013