2013-08-25 12 views
8

Jeśli mam typ rekordów z soczewkami, czy możliwe jest skonstruowanie nowego rekordu bez korzystania z podstawowych akcesorów rekordów?Czy można skonstruować nowy rekord za pomocą soczewek?

{-# LANGUAGE TemplateHaskell #-} 

import Control.Lens 
import Control.Lens.TH 

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

makeLenses ''Foo 

I mógłby zrobić Foo instancję Data.Default a następnie modifiy def obiektywy, ale nie wszystkie typy rekordów będzie mieć sensowne domyślne. Czy Control.Lens ma na to swój własny sposób?

+3

Zawsze możesz użyć 'Foo {}' jako domyślnego, pozostawiając wszystkie pola niezdefiniowane. –

+0

Dzięki! Nie wiedziałem nawet, że możesz tam pominąć pola. Po prostu * założyłem * byłby to błąd kompilacji. –

+5

Pamiętaj, że to nie zadziała, jeśli 'Foo' ma ścisłe pola. – shachaf

Odpowiedz

6

Nie, obecnie nie ma sposobu, aby to zrobić. Będziesz musiał użyć domyślnie czegoś takiego jak Foo{} lub nie używać obiektywu do konstrukcji rekordów. Jednak w tym obiektywie znajduje się już obiektyw issue.

+0

Dzięki za link do biletu github. Oto ciekawa dyskusja! –

Powiązane problemy