Что такое законный грамотный Haskell? Формальный синтаксис где-то? - PullRequest
11 голосов
/ 01 апреля 2011

У кого-то была отличная идея объединить Literate 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, недопустимо.

Ответы [ 3 ]

5 голосов
/ 01 апреля 2011

'#' в первом столбце вызывает проблемы с GHCi, даже с пустыми строками до и после блоков кода.Если вы используете Pandoc, вы можете обойти эту проблему, используя подчеркивание для заголовков.

Hello World
-----------

>  main = putStrLn "hello, world"

Это известная проблема: http://hackage.haskell.org/trac/ghc/ticket/4836

4 голосов
/ 01 апреля 2011

Читать это:

http://www.haskell.org/onlinereport/literate.html

В нем говорится, что во избежание ошибок вам нужна пустая строка между комментариями и кодом.

0 голосов
/ 01 апреля 2011

Я использовал только LHS с Pandoc , но Pandoc действительно указывает, что кавычка с разделителями по дорожкам для птиц является элементом уровня абзаца, а абзацы в уценке Пандока (и обычной уценке) действительно нуждаются в пустой строке до них. Так что следующее должно работать ...

# Hello World #

> main = putStrLn "hello, world"
...