
I'm wondering if anyone has implemented any indentation-sensitive parser components that can be used with Parsec. I'm thinking of components along these lines: [[ blockStart :: Parser () -> Parser Block blockSep :: Block -> Parser () -> Parser () blockEnd :: Block -> Parser () -> Parser () ]] which might be used (somewhat self-referentially) like this: [[ doSequence :: Parser () doSequence = do { symbol "do" ; b <- blockStart (symbol "{") ; e1 <- expression ; es <- many ( do { blockSep b (symbol ";") ; expression } ; blockEnd b (symbol "}") ; dostuff (s1:ss) } ]] The intent is that blockStart would look for the separator component, and if not present would determine the appropriate indentation level from the input character stream. The other components would match or fail according to the way that the corresponding blockStart was matched. #g ------------ Graham Klyne For email: http://www.ninebynine.org/#Contact