产生的镜头让我们假设我有一个持久的类型和希望工程从这种类型的一些值:删除领域强调,在持续
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
User
name Text
email Text
|]
...
getName :: Entity User -> Text
getName (Entity uid vals) = userName vals
的问题是,如果我产生所述类型的镜头,使用mkPersist sqlSettings {mpsGenerateLenses = True}
,我需要在每个投影功能的开头加上下划线或使用镜头的getter:
getName :: Entity User -> Text
getName (Entity uid vals) = _userName vals
getName' :: Entity User -> Text
getName (Entity uid vals) = vals ^. userName
- 首先,我怎么可以还原为默认值,
userName vals
,并添加下划线以使用镜头吸气剂,vals ^. _userName
? - 其次,为什么这样而不是相反呢?
对于什么是值得的,使用getter没有任何开销。 '^。 userName'生成与_userName相同的代码。 –