优雅的镜头
除了用于生成 Lens
es 的标准 makeLenses
功能外,Control.Lens.TH
还提供了 makeClassy
功能。makeClassy
具有相同的类型,其工作方式与 makeLenses
基本相同,只有一个关键区别。除了生成标准镜头和遍历之外,如果类型没有参数,它还将创建一个类,描述所有具有该类型字段的数据类型。例如
data Foo = Foo { _fooX, _fooY::Int }
makeClassy ''Foo
将创造
class HasFoo t where
foo::Simple Lens t Foo
instance HasFoo Foo where foo = id
fooX, fooY::HasFoo t => Simple Lens t Int