私は深くネストされたデータ構造を持っており、Control.Lens.* を使用して、状態モナドでその値に簡単にアクセスできるようにしています。
したがって、次のことを考慮してください。
data Config = Config { _foo :: Maybe Int
, _bar :: Int
}
$(makeLenses ''Config)
メイビー上で「関数的に」操作するにはどうすればよいですか? 次のような慣用的なゲッターを書きたいと思います。
config = Config (Just 1) 0
config^.foo.to fmap (+1) == Just 2
さらに良いことに、Config がより深くネストされている場合、どのように処理すればよいでしょうか?
data Config = { _foo :: Maybe Foo }
data Foo = Foo { _bar :: Bar }
data Bar = Bar Int
$(makeLenses ''Bar)
$(makeLenses ''Foo)
アクセサー foo と bar を使用して、変更された Bar を返すことができますか?