insertjokehere wrote:
--A parser for recognising binary operations
parseBinaryOp :: String -> String -> [(Expr, Expr, String)]
parseBinaryOp op str
        | (elem op binops) && (notElem '(' (snd bm)) && (notElem ')' (snd bm)) 
&&
(elem nstr!!1 binops) = [(EInt 1, EInt 1, "HERE!")]

You want (elem (nstr !! 1) binops) here because function application binds stronger then all operators. You can even write

  elem op binops && notElem '(' (snd bm) && ...

for that reason.

        | otherwise = []
                where bm = bracketMatch str
                          nstr = words (snd (bracketMatch str))

You want

  where bm = ...
        nstr = ...

here, because the first non-space characters of lines belonging to the same layout-block have to be at the same horizontal position. Your

  where bm = bracketMatch ...
            nstr = ...

is parsed as

  where { bm = bracketMatch ... nstr = ... }

instead of

  where { bm = bracketMatch ...;
          nstr = ... }

Tillmann
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to