
#4836: literate markdown not handled correctly by unlit ----------------------------------------------+---------------------------- Reporter: guest | Owner: Type: bug | Status: new Priority: low | Milestone: 7.6.2 Component: Compiler | Version: 7.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects valid program | Unknown/Multiple Test Case: | Difficulty: Unknown Blocking: | Blocked By: | Related Tickets: #7120 ----------------------------------------------+---------------------------- Comment (by dominic): With your patches for markdown and a .md file {{{ ### Ok so lets try this again. ### A page that loads and compiles: ``` module Main where myfact 0 = 1 myfact n = n * n-1 main = putStrLn (show (myfact 5)) ``` Lets see if it works! [ghci] :!which ghc myfact 5 }}} this compiles so hurrah! But BlogLiteraly does '''not''' a) do syntax highlighting b) evaluate "myfact 5" {{{ ~/ghc $ BlogLiteratelyD --ghci TheLitTest.md <h3 id="ok-so-lets-try-this-again.">Ok so lets try this again.</h3> <h3 id="a-page-that-loads-and-compiles">A page that loads and compiles:</h3> <pre><code>module Main where myfact 0 = 1 myfact n = n * n-1 main = putStrLn (show (myfact 5))</code></pre> <p>Lets see if it works!</p> <pre><code><span style="color: gray;">ghci> </span>:!which ghc /usr/local/bin/ghc <span style="color: gray;">ghci> </span>myfact 5</code></pre> <div class="references"> </div> }}} On the other hand with a .lhs file {{{ ### Ok so lets try this again. ### A page that loads and compiles: module Main where
myfact 0 = 1 myfact n = n * n-1
main = putStrLn (show (myfact 5))
Lets see if it works! [ghci] :!which ghc myfact 5 }}} This does not compile {{{ ~/ghc $ ./inplace/bin/ghc-stage2 TheLitTest.lhs TheLitTest.lhs:1:2: lexical error at character '#' }}} But BlogLiterately produces code which is syntax highlighted and evaluates "myfact 5". {{{ ~/ghc $ BlogLiteratelyD --ghci TheLitTest.lhs <h3 id="ok-so-lets-try-this-again.">Ok so lets try this again.</h3> <h3 id="a-page-that-loads-and-compiles">A page that loads and compiles:</h3> <p>module Main where</p> <pre class="sourceCode haskell"><code class="sourceCode haskell"><span style="">></span> <span style="">myfact</span> <span class="hs- num">0</span> <span style="color: red;">=</span> <span class="hs- num">1</span> <span style="">></span> <span style="">myfact</span> <span style="">n</span> <span style="color: red;">=</span> <span style="">n</span> <span style="">*</span> <span style="">n</span><span style="color: green;">-</span><span class="hs-num">1</span> </code></pre> <pre class="sourceCode haskell"><code class="sourceCode haskell"><span style="">></span> <span style="">main</span> <span style="color: red;">=</span> <span style="">putStrLn</span> <span style="color: red;">(</span><span style="">show</span> <span style="color: red;">(</span><span style="">myfact</span> <span class="hs- num">5</span><span style="color: red;">)</span><span style="color: red;">)</span> </code></pre> <p>Lets see if it works!</p> <pre><code><span style="color: gray;">ghci> </span>:!which ghc /usr/local/bin/ghc <span style="color: gray;">ghci> </span>myfact 5 24 </code></pre> <div class="references"> </div> }}} I've discussed this ticket (not BlogLiterately) with Simon Marlow and we concluded that we should try changing the order of unlit and cpp. There may be literate programs which have e.g. #ifdef in their literate (non- code / not in chevrons) block and these will now fail but we concluded that this is the correct behaviour (I hope I am not misquoting Simon here). If this works then I think supporting .md files becomes more straightforward and BlogLiterately will work (and I will remove the workaround that Brent put in to make it handle # correctly when it calls ghci). Does that make sense? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/4836#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler