Haskell 如何省略将由数据库填充的字段

Haskell 如何省略将由数据库填充的字段,haskell,yesod,Haskell,Yesod,我刚刚开始,已经遇到了我的第一个障碍 share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| User email String createdAt UTCTime Maybe default=CURRENT_TIME updatedAt UTCTime Maybe default=CURRENT_TIME deriving Show |] u <- insert $ User "s

我刚刚开始,已经遇到了我的第一个障碍

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
User
  email String
  createdAt UTCTime Maybe default=CURRENT_TIME
  updatedAt UTCTime Maybe default=CURRENT_TIME
  deriving Show
|]

u <- insert $ User "saurabhnanda@gmail.com" Nothing Nothing
share[mkPersist-sqlSettings,mkMigrate“migrateAll”][persist-lowercase|
使用者
电子邮件字符串
createdAt UTCTime可能默认值=当前时间
updatedAt UTCTime可能默认值=当前时间
衍生节目
|]

我对Persistent知之甚少,但这类事情的常用技术是定义一些参数化类型。例如,您可以编写

data Dated a = Dated
    { created :: UTCTime
    , updated :: UTCTime
    , value :: a
    }
这样,您的裸值就不必担心它们的元数据,元数据可以跨所有不同类型统一处理。e、 g.您可能会公开如下API:

new :: a -> IO (Dated a)
new a = do
    now <- getUTCTime
    return (Dated now now a)

update :: Dated a -> a -> IO (Dated a)
update old new = do
    now <- getUTCTime
    return (old { updated = now, value = new })
new::a->IO(日期为a)
新a=do
现在a->IO(日期为a)
更新旧的新的=do

现在我不知道了。但您始终可以定义一个helper函数,该函数接收电子邮件地址并返回一个
IO用户
,其中填充了时间字段(您需要
IO
来获取当前时间)。另一种解决方案:编写触发器。