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"
我有以下 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"