優雅的鏡頭
除了用於生成 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