+//lexer functions
+identT = alpha >>= \a -> many (char '_' <|> alphaNum) >>= \as -> return $ IdentToken [a:as]
+numberT = optional (char '-') >>= \sign -> (some digit) >>= \n -> case sign of
+ Nothing -> return $ NumberToken $ 5 //fromString n
+ _ -> return $ NumberToken $ -5 //(fromString n) * -1
+charLT = liftM CharToken item
+char2T = item >>= \c1 -> case c1 of
+ ':' = char ':' >>| return DoubleColonToken
+ '<' = char '=' >>| return LesserEqToken
+ '>' = char '=' >>| return GreaterEqToken
+ '=' = char '=' >>| return EqualsToken
+ '&' = char '&' >>| return AmpersandsToken
+ '|' = char '|' >>| return PipesToken
+ '-' = char '>' >>| return ArrowToken
+char1T = item >>= \c1 -> findT c1 charTokenMap
+varT = string (fromString "var") >>| return VarToken
+voidT = string (fromString "Void") >>| return VoidToken
+returnT = string (fromString "return") >>| return ReturnToken
+ifT = string (fromString "if") >>| return IfToken
+elseT = string (fromString "else") >>| return ElseToken
+whileT = string (fromString "while") >>| return WhileToken
+trueT = string (fromString "True") >>| return TrueToken
+falseT = string (fromString "False") >>| return FalseToken
+