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 -> Stringに置き換えるだけStringです。

于 2014-09-01T04:05:56.910 に答える