Я пишу документацию Haddock для разработанной мной библиотеки. Я хочу включить пример с выводом, который легко скопировать и вставить в GHCi / WinGHCi. Некоторые примеры кода довольно длинные и их трудно читать, если они не занимают несколько строк.
Хотя шаги, которые я показал ниже, работают, их будет довольно болезненно использовать. Я делаю что-нибудь глупое? Есть ли способ сделать это проще для людей, которые хотят попробовать примеры? Спасибо!
Я использую GH C 8.4.3 на Windows.
Этот код (который, очевидно, намного проще, чем мой реальный пример кода) иллюстрирует проблемы:
{-$Example
>>> :{
>>> let x = 3
>>> y = 4
>>> in x + y
>>> :}
7
-}
Вышеупомянутое включено в исходный файл .hs.
После запуска Haddock и просмотра файла html вы увидите на веб-странице следующее:
>>> :{
>>> let x = 3
>>> y = 4
>>> in x + y
>>> :}
7
Что, чтобы вставить в GHCi, вам нужно:
- скопировать в другое место
- удалить маркеры >>> в начале каждой строки
- добавьте интервал перед y
(Это также предполагает, что вы знаете, для чего нужны: {и:}, что я обнаружил только через 5 минут go при поиске для получения помощи по этой проблеме.)
Затем вы получите:
:{
let x = 3
y = 4
in x + y
:}
Вы можете скопировать все 5 строк и вставить в GHCi, и это даст правильный результат 7.
Если вы попробуете то же самое с WinGHCI, вы получите ошибку: unknown command ':{'
, хотя это работает, если вы копируете и вставляете каждую из 5 строк отдельно ( вход в многострочный режим после :{
)
Я также пробовал:
- с использованием маркеров> вместо >>>. Теперь при этом сохраняется пространство перед y = 4, но вывод 7 становится обычным текстом, не связанным с кодом примера.
с использованием: set + m вместо: {and:}. Вы можете скопировать / вставить 3 строки в GHCi, но WinGHCi жалуется:
<interactive>:71:17: error:
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
хотя это работает, если вы копируете / вставляете строки отдельно (переходя в многострочный режим после первой).