haskell - 过滤器将元数据添加到 pandoc

标签 haskell pandoc

我正在尝试编写一个过滤器,向 pandoc 添加一些新的元数据。

这是我到目前为止的代码:

#!/usr/bin/runhaskell

import Data.Map
import Text.Pandoc
import Text.Pandoc.JSON
import Text.Pandoc.Walk

addName :: Meta -> Meta
addName m = Meta $ insert "Name" (MetaString "My Name") (unMeta m)

main :: IO ()
main = toJSONFilter addName

我收到以下错误:

add-meta.hs:12:8: error:
    • No instance for (Walkable Meta Pandoc)
        arising from a use of ‘toJSONFilter’
    • In the expression: toJSONFilter addName
      In an equation for ‘main’: main = toJSONFilter addName
Failed, modules loaded: none.

如何更改它以便正确构建?

最佳答案

我认为消息的扩展是编译器可以看到

addName :: Meta -> Meta

a -> a 的示例,因此只有可用的实例

instance Walkable a Pandoc => ToJSONFilter (a -> a)

Meta放入a,它需要在某处找到预设的实例Walkable Meta Pandoc,但没有。

解决方案很简单:我们确实有 Walkable Pandoc Pandoc,因此我们只需进行 Pandoc -> Pandoc 转换即可。无论如何,这是 toJSONFilter 最直观的输入:

addName :: Pandoc -> Pandoc 
addName (Pandoc m ls) = Pandoc m' ls where
  m' = Meta (insert "Name" (MetaString "My Name") (unMeta m))

main :: IO ()
main = toJSONFilter addName

关于haskell - 过滤器将元数据添加到 pandoc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40014431/

相关文章:

haskell - 使用 HSpec 和 QuickCheck 验证 Data.Monoid 属性

haskell - 函数的序列类型

haskell - 有没有办法将一元减号(否定)重新绑定(bind)到与 Num 不同的类型类?

r - 有没有办法在 Rmarkdown 中执行条件 Markdown block ?

haskell - 当我希望它不会因约束而重叠时,Haskell 中的重叠实例

haskell - 我可以在 Haskell 中打印多态函数的类型,就像我将一个具体类型的实体传递给它一样吗?

r-markdown - 将背景图像添加到 R Markdown (.rmd) 文件以进行 PDF 输出?

latex - r-Markdown(页码、拇指索引)

python - PDF 中的 Pandoc 语法突出显示不起作用

r - 如何使 RMarkdown (.Rmd) 表格标题位于顶部