与Hakyll的定制pandoc作家

时间:2017-07-07 18:58:25

标签: haskell pandoc hakyll

我试图编写一个特殊的Hakyll编译器来使用lua脚本来构建我的网站。我找到了这个接缝来制作我想要的功能:

customWriterCompilerWith :: (WriterOptions -> Pandoc -> IO String)
                         -> ReaderOptions -> WriterOptions
                         -> Compiler (Item String)
customWriterCompilerWith customWriter ropt wopt = do
    body <- getResourceBody
    withItemBody (unsafeCompiler . customWriter wopt) $ readPandocWith ropt body

但是,当我尝试编译此函数时,我收到此错误:

• Couldn't match expected type ‘Item Pandoc’
              with actual type ‘Compiler (Item Pandoc)’
• In the second argument of ‘($)’, namely
    ‘readPandocWith ropt body’

在Hakyll文档中搜索后,版本readPandocWith中的4.6.8.0类型与4.9.8.0(我的版本)之间存在差异:

readPandocWith:: ReaderOptions-> Item String-> Item Pandoc -- 4.6.8.0

readPandocWith:: ReaderOptions-> Item String-> Compiler (Item Pandoc) -- 4.9.8.0

我在Hakyll文档中找不到一个可以帮助我的函数(类型应该是Compiler (Item Pandoc)-> Item Pandoc)。

你知道如何解决这个问题吗?

您是否知道使用LUA脚本制作自定义Hakyll编译器的另一种方法?

1 个答案:

答案 0 :(得分:0)

如@ user2407038所述,以下内容应该有效:

customWriterCompilerWith customWriter ropt wopt = do
    body <- getResourceBody
    doc  <- readPandocWith ropt body
    withItemBody (unsafeCompiler . customWriter wopt) doc

要详细了解<->>=的语法糖),我可以推荐http://learnyouahaskell.com(monad章节)。