我开始使用pandoc api编写一些程序,从https://johnmacfarlane.net/BayHac2014/#/the-pandoc-types获取示例,但是我无法将Pandoc与m Pandoc隔离开来。
module ImageAttr where
import Text.Pandoc.Builder
import Text.Pandoc.Generic
import Text.Pandoc.Definition
import Text.Pandoc.JSON
import qualified Data.Char as DataChar
import qualified Data.List as DataList
import Data.Either
import Text.Parsec as Parsec
import Text.Pandoc
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
fromRight :: b -> Either a b -> b
fromRight _ (Right b) = b
fromRight b _ = b
fromLeft :: b -> Either b a -> b
fromLeft _ (Left b) = b
fromLeft b _ = b
main :: IO ()
main = do
result <- runIO $ do
doc <- readMarkdown def (T.pack "[testing](url)")
writeRST def doc
x<-((handleError result))
print x
输出是字符串,但我需要pandoc ast以前它是PandocError Pandoc类型,而是我得到&#34; m Pandoc&#34;。如何让Pandoc离开Pandoc&#34;。
任何想法? 顺便说一句,我是新人,还在学习哈斯克尔。我收到错误消息:
ImageSizeModifer.hs:28:12:
Couldn't match expected type ‘PandocIO a0’ with actual type ‘IO ()’
In a stmt of a 'do' block: print ""
In the second argument of ‘($)’, namely
‘do { doc <- readMarkdown def (T.pack "[testing](url)");
print "" }’
Failed, modules loaded: none.
Prelude T>
我的问题是我需要Pandoc,但我不知道如何获得它?有新的PandocIO和PandocPure,我相信这些都是新的。
答案 0 :(得分:6)
新版pandoc
有readMarkdown :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
。这遵循通常的mtl
- 样式来指定monad上的约束,而不是实际的monad。
这意味着要使用readMarkdown
,您需要选择满足m
的特定PandocMonad
。您可以通过滚动到its doc的“实例”部分找到PandocMonad
具有的实例。在这种情况下,您会发现:
PandocMonad PandocPure
也许很有意思PandocMonad PandocIO
也许很有意思(MonadTrans t, PandocMonad m, Functor (t m), MonadError PandocError (t m), Monad (t m), Applicative (t m)) => PandocMonad (t m)
- 不感兴趣,需要另一个PandocMonad m
PandocMonad m => PandocMonad (ParsecT s st m)
- 不感兴趣,需要另一个PandocMonad m
现在,滚动浏览定义PandocPure
和PandocIO
的位置,您可以找到运行从中提取信息的方法:
将这些功能中的任何一项与readMarkdown
结合使用,即可获得具体的Either
类型。
runIO (readMarkdown def (T.pack "[testing](url)")) :: IO (Either PandocError Pandoc)
runPure (readMarkdown def (T.pack "[testing](url)")) :: Either PandocError Pandoc
请注意,我对Pandoc或其API一无所知 - 我所做的就是完成上述过程。
答案 1 :(得分:3)
有关使用pandoc 2.x API的基本教程,请查看http://pandoc.org/using-the-pandoc-api.html。