gpt4 book ai didi

haskell - 将 literate Haskell (.lhs) 转换为 Haskell (.hs)

转载 作者:行者123 更新时间:2023-12-04 11:50:38 26 4
gpt4 key购买 nike

有没有一种简单的方法可以将有文化的 Haskell 文件 ( .lhs ) 转换为常规的 Haskell ( .hs ) 源文件?

我认为可能有 GHC 选项,但 GHC 手册似乎没有太多关于识字程序或 .lhs 的信息。格式。 “识字”这个词甚至没有出现在索引中!

Literate programming Wiki 上的链接包括指向在“bird”和“\begin{code} .. \end{code}”样式之间转换或转换 .lhs 的脚本的链接。转换为 TeX 格式,仅此而已。

最佳答案

GHC 本身使用一个名为 unlit 的独立 C 程序。处理.lhs文件。您可能会发现它安装在您的 GHC 安装中的某个位置。如果你运行它,它会显示一些命令行选项而没有解释:

$ cd ~/.stack/programs/x86_64-linux/ghc-8.6.4/lib/ghc-8.6.4/bin
$ ./unlit
usage: unlit [-q] [-n] [-c] [-#] [-P] [-h label] file1 file2

深入研究源代码,看起来选项是:
-q   "quiet": ignore certain errors, so permit missing empty lines before and after
"bird" style and accept completely empty programs
-n (default) "noisy": opposite of -q, so be noisy about errors
-c "crunch": don't leave blank lines where literate comments are removed
-# delete lines that start with "#!"
-P suppress CPP line number pragma, but only matters if `-h` is supplied
-h File name for an initial `#line` pragma

所以,命令行:
$ /path/to/unlit -c myfile.lhs myfile.hs

可能会很好地转换 myfile.lhs :
This is a literate program

> main :: IO ()

using both code styles
\begin{code}
main = putStrLn "hello"
\end{code}

到一个“文盲”程序 myfile.hs :
  main :: IO ()
main = putStrLn "hello"

对于“鸟”样式,它实际上用空格替换了 '>' 字符,并将其余的缩进保留在原位,因此对于我上面的示例, myfile.hs 中的两行缩进两个空格,这可能是一个缺点。

关于haskell - 将 literate Haskell (.lhs) 转换为 Haskell (.hs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60083377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com