2011-04-01 63 views
11

Someone有一个将Literate Haskell和Markdown结合起来的好主意。对我有意义,所以我想尝试一下。但有一点Haskell没有喜欢的降价 '#' 带头语法:什么是合法的Literate Haskell?形式语法的地方?

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语法无效。

+0

对不起所有...当我试图让我的帖子简明扼要,忘了,有一个明确的原因,它是有在代码中的空行被删除。缺失的线不是我的问题的原因。 – Anm 2011-04-01 14:27:24

回答

5

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

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

> main = putStrLn "hello, world" 

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

0

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

# Hello World # 

> main = putStrLn "hello, world" 
4

阅读:

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

它说,为了避免错误,你需要注释和代码之间的空行。

+1

具体而言,*“为了捕获某些错误地忽略”>“的情况,程序行出现在非空白注释行旁边是错误的,如果该行仅包含空白“。* imho这真的很愚蠢......这种行为应该可以通过命令行标志或其他东西来配置。 – 2011-04-01 05:39:02

相关问题