5import Data.Char (isUpper,isLower)
6import Control.Monad (liftM,guard)
9varNoSpace = do { t <- item; case t of { ID v -> return v; _ -> zero } }
10var = whitespace >> varNoSpace
11capVar = do whitespace; t <- item
12 case t of { ID (v:vs) -> guard (isUpper v) >> return (v:vs) ; _ -> zero }
13lowVar = do whitespace; t <- item
14 case t of { ID (v:vs) -> guard (isLower v) >> return (v:vs) ; _ -> zero }
16chr = do { whitespace; t <- item; case t of { CHAR c -> return c; _ -> zero } }
18tNoSpace token = sat (==token)
19tWithSpace token = forcedWS >> sat (==token)
20t token = whitespace >> sat (==token)
22forcedWS = do { sat (==SPACES); star nl_space } +|+ plus nl_space
23 where nl_space = plus (sat (==NEWLINE)) >> sat (==SPACES)
24whitespace = optional forcedWS
28 access <- optional $ opParserNospace (==".")
30 Just "." -> accessible (Access e `liftM` var)
35 ; case t of { OP op -> if pred op then return op else zero; _ -> zero } }
36opParser pred = whitespace >> opParserNospace pred
37anyOp = opParser (const True)
38assign = opParser (=="=")
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list