2011-04-01 64 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

相關問題