Haskell优雅的镜片

示例

除了makeLenses用于生成Lenses的标准功能外,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