Что такое законный грамотный Хаскелл? Формальный синтаксис где-то?
У кого-то была отличная идея объединить грамотные Haskell и Markdown. Мне показалось, поэтому я хотел попробовать. Но что-то Haskell не нравится в синтаксисе заголовка Markdown '#':
Hello World
> main = putStrLn "hello, world"
работает...
$ runhaskell hello_world.lhs
hello, world
В то время как...
# Hello World #
> main = putStrLn "hello, world"
не...
$ runhaskell hello_world.lhs
hello_world.lhs:1:3: lexical error at character 'H'
Есть ли там определение того, что является законным? Синтаксис Haskell упоминает Literate Haskell на примере, и ничто не означает, что синтаксис Markdown недействителен.
Ответы
Ответ 1
A '#' в первом столбце вызывает проблемы с GHCi, даже с пустыми строками до и после блоков кода. Если вы используете Pandoc, вы можете обойти эту проблему, используя подчеркивание для заголовков.
Hello World
-----------
> main = putStrLn "hello, world"
Это известная проблема: http://hackage.haskell.org/trac/ghc/ticket/4836
Ответ 2
Прочтите это:
http://www.haskell.org/onlinereport/literate.html
В нем говорится, что для предотвращения ошибок вам нужна пустая строка между комментариями и кодом.
Ответ 3
Я использовал LHS с Pandoc, но Pandoc указывает, что кавычка с разделителями по трекам с птицами - элемент уровня абзаца, а параграфы в уценке Pandoc (и регулярной уценке) нужна пустая строка перед ними. Итак, следующее должно работать...
# Hello World #
> main = putStrLn "hello, world"