[Haskell-cafe] '#' in literate haskell

John MacFarlane jgm at berkeley.edu
Sat Nov 29 22:07:33 EST 2008

Can anyone explain why ghc does not treat the following
as a valid literate haskell program?

--------- test.lhs ----
# This is a test

> foo = reverse . words


When I try to load this in ghci (or compile it using ghc),
I get:

test.lhs:1:2: lexical error at character 'T'

It seems that the problem is the '#' character in the first
column.  Replacing it with something else, or moving it to
the right one space, solves the problem.

The following literate haskell program, from
also fails to load for me, for the same reason (the leading
'#' in line 8).

---- literate-haskell-and-c.lhs ---
/* c and lhs file

> module Foo where
> main = print "Haskell"


int main() {
  return 0;

I've reproduced this with ghc 6.10.1 and ghc 6.8.3 (linux binaries
from haskell.org) and with ghc 6.8.2 (Ubuntu intrepid).
Interestingly, hugs (September 2006 version) has no trouble with
test.lhs. I haven't tried ghc 6.6.

I care about this because I'd like to use markdown conventions
to format the comment parts of literate haskell programs.  Markdown
supports atx-style headers, which begin with strings of '#'
characters starting in the first column. I know that some people use
markdown with literate haskell, so there must be something basic here
that I'm missing!


More information about the Haskell-Cafe mailing list