Я пытаюсь написать фильтр, который добавляет новые метаданные в 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.
Как я могу изменить это так строит правильно?
Спасибо, ваше объяснение очень ясное. Я неправильно предполагал, что «Meta -> Meta» будет соответствовать «a -> a». –
@ RichardParsons Я не думаю, что это предположение было неверным, и я думаю, что этот ответ явно говорит, что предположение верно; почему вы считаете это неправильным? –
@ DanielWagner Я изо всех сил пытаюсь исправить терминологию Haskell, но я сделаю все возможное. Я мог видеть, что функция toJSONFilter требует аргументов (a -> a). Поскольку моя функция имеет подпись Meta -> Meta, а Meta - от Pandoc, я решил, что JSONFilter будет работать над ней. На самом деле, нет экземпляра «Walkable Meta Pandoc», и поэтому он не прошел. Ответ Майкла объяснил, что, поскольку есть экземпляр «Walkable Pandoc Pandoc», я мог бы изменить свою функцию, чтобы использовать эту подпись вместо Meta -> Meta. Насколько яснее сейчас? –