GH C сама использует отдельную программу C с именем unlit
для обработки .lhs
файлов. Возможно, вы найдете его установленным где-то в вашей установке GH C. Если вы запустите его, он покажет несколько параметров командной строки без объяснения:
$ 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
имеют два пробела, что может быть недостатком .