產生的鏡頭讓我們假設我有一個持久的類型和希望工程從這種類型的一些值:刪除領域強調,在持續
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相同的代碼。 –