2013-08-25 11 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はなく、すべてのレコードタイプは、適切なデフォルト値を持つことになりますことができます。 Control.Lensには独自の方法がありますか?

+3

デフォルトでは常に 'Foo {}'を使うことができ、すべてのフィールドは未定義のままです。 –

+0

ありがとう!私はあなたがフィールドを省略できることを知らなかった。私はちょうど*コンパイルエラーであると仮定しました。 –

+5

'Foo'が厳密なフィールドを持っている場合、これは動作しません。 – shachaf

答えて

6

いいえ、現在、その方法はありません。デフォルトではFoo{}のようなものを使用するか、レンズを記録用に使用しないでください。しかし、これをカバーするレンズには既にissueがあります。

+0

githubチケットへのリンクありがとう。いくつかの興味深い議論がある! –

関連する問題