Haskell 仆人:return 文件中的字符串

Haskell Servant: return String from file

我有以下 API:

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


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

我需要做的是读取一个文件,然后 return 它的内容作为对“getBoard”路径请求的响应。事实证明这非常困难,因为 readFile return 是 IO String,而不是 String。已经在寻找 return 从 readFile 获取 String 的方法,我发现的是:

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 正在 returning IO String。我不确定 convertToString 是我做错了,还是 serverRoutes 处的 do 有问题。任何帮助将不胜感激。

你所在的 monad 不是 IO,而是 MonadIO 的一个实例,所以你使用 liftIO,像这样:

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