首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提升到Servant服务器类型?

如何提升到Servant服务器类型?
EN

Stack Overflow用户
提问于 2021-05-28 08:31:25
回答 1查看 41关注 0票数 2

我在以下代码中遇到了问题:

代码语言:javascript
复制
{-# 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

我得到的错误是:

代码语言:javascript
复制
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
   |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

问题是如何正确地提升,以便提升返回Servant Server类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-28 10:28:59

这个问题与提升无关。真正的问题是您只指定了一个Handler,但是您的服务器需要两个Handler,一个用于"repository" :> "all" :> Get '[JSON] [Repository],另一个用于"all" :> "repository" :> Get '[JSON] [Repository]。下面是第二个server的框架(用下面的代码替换现有的Here):

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67731453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档