我正在研究this project,以便與Haskell相處融洽,並努力尋找簡單的示例。將IO [FilePath]轉換爲字符串或字節流
在這個例子中,我想爲Snap創建一個Web請求處理程序,它會返回一個目錄中的文件列表。
我相信我試圖將getDirectoryContents返回到Snap想要的字節串。
我最困惑什麼用的返回值我在下面的一行filenames <- getDirectoryContents "data"
得到做到:
import Control.Applicative
import Snap.Core
import Snap.Util.FileServe
import Snap.Http.Server
import System.Directory (getDirectoryContents)
main :: IO()
main = quickHttpServe site
site :: Snap()
site =
ifTop (writeBS "hello world") <|>
route [ ("foo", writeBS "bar")
, ("echo/:echoparam", echoHandler)
, ("view_root_json_files", listRootFilesHandler)
] <|>
dir "static" (serveDirectory ".")
echoHandler :: Snap()
echoHandler = do
param <- getParam "echoparam"
maybe (writeBS "must specify echo/param in URL")
writeBS param
listRootFilesHandler :: Snap()
listRootFilesHandler = do
-- read all filenames in /data folders
filenames <- getDirectoryContents "data"
writeText filenames
也可以完全跳過字符串,並使用高質量的posix-paths庫,它使用嚴格的ByteString作爲文件名,等等http://hackage.haskell.org/package/posix- path-0.2.0.3/docs/System-Posix-Directory-Traversals.html – Michael 2014-08-30 19:00:21