Haskell 在persistent中使用'get'和'toSqlKey'

Haskell 在persistent中使用'get'和'toSqlKey',haskell,persistent,servant,Haskell,Persistent,Servant,我正在尝试将持久化postgresql与servant一起使用 我有一个用户模型 我希望有一个端点,它接受一个id并返回具有该id的用户 根据其他答案,我可以使用toSqlKey将Int64转换为Key以馈送到get 我的函数如下所示: oneUser :: Int64 -> App (Entity User) oneUser userId = do maybeUser <- runDb $ get $ toSqlKey userId case maybeUser of

我正在尝试将持久化postgresql与servant一起使用

我有一个
用户
模型

我希望有一个端点,它接受一个id并返回具有该id的用户

根据其他答案,我可以使用
toSqlKey
Int64
转换为
Key
以馈送到
get

我的函数如下所示:

oneUser :: Int64 -> App (Entity User)
oneUser userId = do
  maybeUser <- runDb $ get $ toSqlKey userId
  case maybeUser of
    Nothing ->
      throwError err404
    Just user ->
      return user
runDb :: (MonadReader Config m, MonadIO m) => SqlPersistT IO b -> m b
runDb query = do
  pool <- asks getPool
  liftIO $ runSqlPool query pool
请告诉我我做错了什么,以及我将来应该在哪里寻找这样的东西。我在hackage上找不到
get
,在stackage上找不到库的正确版本等

runDb
看起来像:

oneUser :: Int64 -> App (Entity User)
oneUser userId = do
  maybeUser <- runDb $ get $ toSqlKey userId
  case maybeUser of
    Nothing ->
      throwError err404
    Just user ->
      return user
runDb :: (MonadReader Config m, MonadIO m) => SqlPersistT IO b -> m b
runDb query = do
  pool <- asks getPool
  liftIO $ runSqlPool query pool
runDb::(monader配置m,MonadIO m)=>sqlpersist IO b->mb
runDb query=do

pool不同之处在于,
get…
返回一个普通的
用户
而不是
实体用户
,因此这将起作用:

altSingleUser :: Int64 -> App User
altSingleUser userid = do
    let foo = get (toSqlKey userid) :: SqlPersistT IO (Maybe User)
    maybeUser <- runDb $ foo
    case maybeUser of
         Nothing ->
            throwError err404
         Just person ->
            return person

不同之处在于,
get…
返回的是普通的
用户
而不是
实体用户
,因此这将起作用:

altSingleUser :: Int64 -> App User
altSingleUser userid = do
    let foo = get (toSqlKey userid) :: SqlPersistT IO (Maybe User)
    maybeUser <- runDb $ foo
    case maybeUser of
         Nothing ->
            throwError err404
         Just person ->
            return person

让maybeUser=Nothing
在那里做什么?这是打字错误吗?这是实验的遗留问题:-)我刚刚又测试了一次,没有那一行就行了。谢谢。实体数据构造函数就是我要找的。让maybeUser=Nothing
做什么?这是打字错误吗?这是实验的遗留问题:-)我刚刚又测试了一次,没有那一行就行了。谢谢。实体数据构造函数就是我要找的。