1

鉴于我用来学习 Haskell 的这个小项目,我想将我的请求处理程序的代码生成移动到 Hamlet 模板,但不确定如何传递。

当取消注释行时,我当前的代码会生成以下错误,这是第一个阻止程序:

无法匹配预期的类型`String -> String'
                实际类型为“字符串”
    在 `renderHtml' 调用的返回类型中
    可能的原因:`renderHtml' 应用于太多参数
    表达式中:renderHtml($(shamletFile "fileList.hamlet"))
    在“myTemplate”的等式中:
        myTemplate = renderHtml ($ (shamletFile "fileList.hamlet"))

代码:

site :: Snap ()
site =
    ifTop (writeBS "hello world") <|> 
    route [ ("foo", writeBS "ba"),
            ("view_root_json_files", listRootFilesHandler)
          ] <|> 
    dir "static" (serveDirectory ".")

--myTemplate :: String -> String
--myTemplate = renderHtml ( $(shamletFile "fileList.hamlet") )

toText :: [FilePath] -> Text
toText = foldMap (flip snoc '\n' . pack)

listRootFilesHandler :: Snap ()
listRootFilesHandler = do
    filenames <- liftIO $ getDirectoryContents "data"
    let filtered_filenames = filter (not . isPrefixOf ".") filenames
    writeText $ toText filtered_filenames
4

1 回答 1

2

Ghc 告诉你正确的类型签名放在那里。只需替换String -> StringString.

于 2014-09-01T04:05:56.910 回答