什么是合法的文化Haskell?正式语法在哪里?

时间:2011-04-01 03:37:46

标签: haskell markdown literate-programming

Someone将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 个答案:

答案 0 :(得分:5)

第一列中的'#'会导致GHCi出现问题,即使代码块前后有空行也是如此。如果您使用的是Pandoc,则可以使用标题下划线解决此问题。

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

>  main = putStrLn "hello, world"

这是一个已知问题:http://hackage.haskell.org/trac/ghc/ticket/4836

答案 1 :(得分:4)

阅读本文:

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

它表示为了避免错误,您需要在注释和代码之间留一个空白行。

答案 2 :(得分:0)

我只使用了LHS with Pandoc,但是Pandoc确实指定了鸟类分隔的块引用是段落级元素,而Pandoc markdown(和常规markdown)中的段落在它们之前需要一个空行。所以以下内容应该有效......

# Hello World #

> main = putStrLn "hello, world"