如何解决如何提升到Servant服务器类型?
我在使用以下代码时遇到问题:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
module API where
import Data.Text
import Servant.API
import Servant
import Repository
import FileOperation
import Util
import Config
import qualified Data.Map as M
import Control.Monad.State.Strict (liftIO)
import Network.Wai.Handler.Warp
type RepositoryAPI = "repository" :> "all" :> Get '[JSON] [Repository]
:<|> "all" :> "repository" :> Get '[JSON] [Repository]
server :: Server RepositoryAPI
server = do
repositoriesMap <- liftIO $ loadFromFile repositoryMapFile
let repositories = M.elems repositoriesMap in do
return repositories
repositoryAPI :: Proxy RepositoryAPI
repositoryAPI = Proxy
app :: Application
app = serve repositoryAPI server
main :: IO ()
main = run 8081 app
我得到的错误是:
API.hs:22:3: error:
• Couldn't match type ‘[a0]’ with ‘Handler [Repository]’
Expected type: Server RepositoryAPI
Actual type: Handler [Repository] :<|> [a0]
• In a stmt of a 'do' block:
repositoriesMap <- liftIO $ loadFromFile repositoryMapFile
In the expression:
do repositoriesMap <- liftIO $ loadFromFile repositoryMapFile
let repositories = ... in do return repositories
In an equation for ‘server’:
server
= do repositoriesMap <- liftIO $ loadFromFile repositoryMapFile
let ... in do ...
|
22 | repositoriesMap <- liftIO $ loadFromFile repositoryMapFile
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
问题是如何正确提升,让提升返回仆人服务器类型?
解决方法
问题与举重无关。真正的问题是您只指定了一个 Handler
,但您的服务器需要两个 Handler
,一个用于 "repository" :> "all" :> Get '[JSON] [Repository]
,另一个用于 "all" :> "repository" :> Get '[JSON] [Repository]
。这是第二个的骨架(用这个替换现有的 server
):
getRepositoryAll :: Handler [Repository]
getRepositoryAll = do
repositoriesMap <- liftIO $ loadFromFile repositoryMapFile
let repositories = M.elems repositoriesMap in do
return repositories
getAllRepository :: Handler [Repository]
getAllRepository = undefined -- fill this in
server :: Server RepositoryAPI
server = getRepositoryAll :<|> getAllRepository
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。