Haskell仆人:从文件返回字符串
我有以下 API:
type ServerAPI =
"getBoard" :> Get '[JSON] String
serverRoutes :: Server ServerAPI
serverRoutes =
return (readFile "src/board.txt")
我需要做的是读取一个文件,然后将其内容作为对“getBoard”路由请求的响应返回。事实证明,这非常困难,因为readFile返回的是 a IO String,而不是 a String。已经找了返回的方式String从readFile什么我发现是这样的:
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"