1{-# OPTIONS_GHC -Wall #-}
2module Transform.Expression where
4import Control.Applicative ((<$>),(<*>))
5import SourceSyntax.Expression
6import SourceSyntax.Location
8crawl :: ([def] -> Either a [def']) -> (LExpr' def) -> Either a (LExpr' def')
14 Var x -> return (Var x)
15 Lambda p e -> Lambda p <$> go e
16 Binop op e1 e2 -> Binop op <$> go e1 <*> go e2
17 Case e cases -> Case <$> go e <*> mapM (\(p,b) -> (,) p <$> go b) cases
18 Data name es -> Data name <$> mapM go es
19 Literal lit -> return (Literal lit)
20 Range e1 e2 -> Range <$> go e1 <*> go e2
21 ExplicitList es -> ExplicitList <$> mapM go es
22 App e1 e2 -> App <$> go e1 <*> go e2
23 MultiIf branches -> MultiIf <$> mapM (\(b,e) -> (,) <$> go b <*> go e) branches
24 Access e lbl -> Access <$> go e <*> return lbl
25 Remove e lbl -> Remove <$> go e <*> return lbl
26 Insert e lbl v -> Insert <$> go e <*> return lbl <*> go v
27 Modify e fields -> Modify <$> go e <*> mapM (\(k,v) -> (,) k <$> go v) fields
28 Record fields -> Record <$> mapM (\(k,v) -> (,) k <$> go v) fields
29 Markdown uid md es -> Markdown uid md <$> mapM go es
30 Let defs body -> Let <$> transform defs <*> go body
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