如果查看pandoc文档,您会看到用Haskell编写的脚本.我最近才学习了Haskell的基础知识,所以我不熟悉这些脚本中似乎出现的一些习语.
我不明白的一件事是def在这些脚本中使用.例如,在Text.Pandoc的顶部是以下代码:
markdownToRST :: String -> String
markdownToRST =
(writeRST def {writerReferenceLinks = True}) . readMarkdown def
main = getContents >>= putStrLn . markdownToRST
Run Code Online (Sandbox Code Playgroud)
'def'在做什么之后做readMarkdown了writeRST什么?
在Haskell中,def只是一个变量名,没什么特别的.在def本代码是Data.Default.def从所述数据的默认包.它用于访问默认值.它返回的默认值取决于它所使用的类型.在这种情况下,它分别返回默认的编写器选项和默认阅读器选项.
要想出这些问题,您可以使用hoogle在Haskell软件包的API文档中搜索名称或类型.在这种情况下,您可以搜索+ pandoc def以def在pandoc API文档中搜索名称.第一个结果是Text.Pandoc.Options.def.我对类型签名感到困惑def,所以我点击Default了签名中的类型类,它将我带到了data-default包的文档中.
Default类型类的文档没有提及ReaderOptions,因为data-default包不知道pandoc包.但是在Haskell中,类型类是开放的,因此pandoc包可以添加instance Default ReaderOptions自身.请参阅文档中的实例列表ReaderOptions.或者在这里查看实际instance Default ReaderOptions声明的源代码.