Haskell仆人:从文件返回字符串

我有以下 API:

type ServerAPI =
    "getBoard" :> Get '[JSON] String


serverRoutes :: Server ServerAPI
serverRoutes = 
    return (readFile "src/board.txt")

我需要做的是读取一个文件,然后将其内容作为对“getBoard”路由请求的响应返回。事实证明,这非常困难,因为readFile返回的是 a IO String,而不是 a String。已经找了返回的方式StringreadFile什么我发现是这样的:

convertToString :: String -> String
convertToString str = str


type ServerAPI =
    "getBoard" :> Get '[JSON] String


serverRoutes :: Server ServerAPI
serverRoutes = do
    contents <- readFile "src/board.txt"
    let x = convertToString contents
    return x

但它一直对我说serverRoutes正在返回一个IO String. 我不确定是我convertToString做错了还是问题出do在 at 上serverRoutes。任何帮助,将不胜感激。

回答

您所在的 monad 不是IO,但它是 的一个实例MonadIO,因此您可以使用liftIO,如下所示:

serverRoutes :: Server ServerAPI
serverRoutes = liftIO $ readFile "src/board.txt"


以上是Haskell仆人:从文件返回字符串的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>