Haskell 在persistent中使用'get'和'toSqlKey'
我正在尝试将持久化postgresql与servant一起使用 我有一个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
用户
模型
我希望有一个端点,它接受一个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
做什么?这是打字错误吗?这是实验的遗留问题:-)我刚刚又测试了一次,没有那一行就行了。谢谢。实体数据构造函数就是我要找的。