我正在尝试为具有相同字段名称的记录构建镜头。除此之外,我试图“包装/扩展”这些基本记录,并希望相同的字段名称适用于包装/扩展的记录(我相信,优雅的镜头就是这样做的)。我如何让以下内容发挥作用:
-- Data types for context of the code snippet below
data Download = Download {
userId :: UserId
,gid :: Gid
,logId :: LogId
,parentId :: Maybe DownloadId
,createdAt :: UTCTime
,updatedAt :: UTCTime
}
data File = File {
downloadId :: DownloadId
,fpath :: String
,len :: Int
,createdAt :: UTCTime
,updatedAt :: UTCTime
}
data Url = Url {
downloadId :: DownloadId
,fileId :: FileId
,url :: URL
,createdAt :: UTCTime
,updatedAt :: UTCTime
}
data DownloadObject = DownloadObject {
_key :: DownloadId
,_dbDownload :: Download
,_dbFiles :: [FileObjects]
}
data FileObject = FileObject {
_key :: FileId
,_dbFile :: File,
,_dbUrls :: [UrlObjects]
}
data UrlObject = UrlObject {
_key :: UrlId
,_dbUrl :: Url
}
fetchDownload :: DownloadId -> DownloadObject
考虑到这些数据类型,我如何让以下镜头发挥作用:
dload <- fetchDownload dloadId
dload ^. key -- of type DownloadId
dload ^. createdAt -- of type UTCTime
((dload ^. files) !! 1) ^. key -- of type FileId
((dload ^. files) !! 1) ^. createdAt -- of type UTCTime