使用 Hakyll 自定义 pandoc writer

Custom pandoc writer with 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文档中搜索后,4.6.8.0版本和4.9.8.0版本(我的版本)中readPandocWith的类型有所不同:

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 编译器的方法吗?

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

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

要阅读有关 <->>= 的语法糖)的更多信息,我可以推荐 http://learnyouahaskell.com(monad 章节)。