Field
是这个词吗
lens
用于描述每个命名字段一个类的模式,允许具有相同字段名但(可选)不同类型的多个记录。所以呢
camelCaseFields
makeFieldOptics
,
defaultFieldRules
所有人都以他们的名义说他们将产生这些
HasFoo
课程,以通常的简洁风格
透镜
.
makeClassy
生成名为
Has*
,但以数据类型命名,而不是记录字段,并且不遵循不同的模式。
上面的代码生成以下代码(用
-ddump-splices
makeLensesWith camelCaseFields ''Env
======>
class HasBalance s a | s -> a where
balance :: Lens' s a
instance HasBalance Env (TVar Int) where
{-# INLINE balance #-}
balance f_a4eTr (Env x1_a4eTs x2_a4eTt)
= (fmap (\ y1_a4eTu -> (Env x1_a4eTs) y1_a4eTu)) (f_a4eTr x2_a4eTt)
class HasLog s a | s -> a where
log :: Lens' s a
instance HasLog Env (String -> IO ()) where
{-# INLINE log #-}
log f_a4eTx (Env x1_a4eTy x2_a4eTz)
= (fmap (\ y1_a4eTA -> (Env y1_a4eTA) x2_a4eTz)) (f_a4eTx x1_a4eTy)