过滤以将元数据添加到 pandoc
Filter to add metadata to 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
,它需要在某处找到预设的instance 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
我正在尝试编写一个向 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
,它需要在某处找到预设的instance 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