Hi, You seem to like let a lot, whereas I hardly ever use them. In general I find where a lot more readable.
(disclaimer, all notes untested, may not compile, may be wrong) Also, most haskell programs use $ instead of |> > -- For convenience: > currTokType :: ParseContext -> TokenType > currTokType ctx = ctx |> currTok |> tokenType this could be written as: tokenType $ currTok $ ctx or even more succinctly, using points free style as: > currTokType = tokenType . currTok > writeOutput s = \ctx -> > let newOutput = s : (output ctx) in > ctx {output=newOutput} why not? > writeOutput s ctx = ctx{output = s : output ctx} shorter, no lambda (the argument is moved), no where, less code more obvious, and also some redundant brackets have been removed. > stackTop ctx = > let (x:xs) = stack ctx in x stackTop ctx = head ctx > pop ctx = > let (x:xs) = stack ctx in ctx {stack=xs} ctx{stack = tail (stack ctx)} > classifyString s@(c:[]) > | not (isAlphaNum c) = Token (Symbol c) s classifyString [EMAIL PROTECTED] means the same thing (a one element list) > classifyString s = Token (whichType s) s > where whichType "volatile" = Qualifier isType "volatile" = Qualifier isType x | x `elem` ["void","char","signed" ...] = Type isType x = Identifier -- getting a bit bored here, so less suggestions from now on :) -- but if you send off a second draft i'll take another look -- i guess most things are done consistently > if ctx |> currTokValue |> (!! 0) |> isDigit (!! 0) is head Biggest thing is |> is not a standard Haskell pattern, its usually either ($) or (.). Also where is great, and case statements are usually used less. Thanks Neil _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe