Literate Haskell是否支持索引函数名,类型类和变量引用?是否有一个过滤器,我可以在Literate Haskell源上运行,它将为我提供一个很好的PDF手册或一个超链接的HTML文档。
这些是noweb和CWEB非常好的功能,我认为这会刺激Literate Haskell的广泛采用。
例如,查看CWEB中编写的word count program。项目#4中第一页上的代码块使用了该代码的使用位置。 LHS不支持块,但我想知道代码的使用位置:
评论func。
func = id
用于:(X.Y.Z.f,A.B.C.g,第1.5节)
func2 = indefined
用于:(A.B.C.x,第2.1节)
另外还有一个索引,它汇总了文档中引用的所有函数名和变量以及其他函数等。
答案 0 :(得分:1)
在Latex中有一些可能性,下面使用包listings和makeindex来创建所有函数的列表。此外,\ label用于创建不同部分之间的交叉引用:
\documentclass[a4paper,11pt,reqno,twoside,pdflatex,makeidx]{amsart}
\usepackage[a4paper]{geometry}
\usepackage{listings}
\lstloadlanguages{Haskell}
\lstset{
flexiblecolumns=false,
basewidth={0.5em,0.45em},
basicstyle=\ttfamily,
language=haskell,
% numbers=left, % optional numbering of code lines
firstnumber=last,
numberstyle=\tiny,
stepnumber=2,
numbersep=5pt,
index={fac,fac2}
}
\lstnewenvironment{code}{}{}
\usepackage{hyperref}
\title{The factorial function}
\author{Federico Squartini}
\date{}
\makeindex
\begin{document}
\maketitle
\section{Factorial function}
\label{code:fac1}
The factorial function can be defined as:
\begin{code}
fac 0 = 1
fac n = n * fac (n-1)
\end{code}
\section{Factorial function in constant space}
The code for the factorial defined section~\ref{code:fac1} uses $o(n)$ stack
space. The following function uses constant space:
\begin{code}
fac2 n = go 1 1
where
go !acc i| i <= n = go (acc*i) (i+1)
| otherwise = acc
\end{code}
\printindex
\end{document}
编译:
pdflatex example.tex
makeindex example.idx
pdflatex example.tex
pdflatex example.tex
结果pdf为here。这非常适合生成pdf文件。对于其他类型的输出(例如html),您应该将latex与pandoc一起使用。
另一种选择是使用pandoc的markdown语法,与ad hoc latex命令(\ label和makeindex)混合使用。这应该简化任务,并在源文件中产生较少的语法噪音。