1{-# OPTIONS_GHC -Wall #-}
2module Transform.Expression (crawlLet) where
4import Control.Applicative ((<$>),(<*>))
5import AST.Annotation ( Annotated(A) )
6import AST.Expression.General
10 :: ([def] -> Either a [def'])
12 -> Either a (Expr ann def' var)
13crawlLet defsTransform annotatedExpression =
14 go annotatedExpression
16 go (A srcSpan expression) =
22 Lambda pattern body ->
23 Lambda pattern <$> go body
25 Binop op leftExpr rightExpr ->
26 Binop op <$> go leftExpr <*> go rightExpr
29 Case <$> go e <*> mapM (\(p,b) -> (,) p <$> go b) cases
32 Data name <$> mapM go es
37 Range lowExpr highExpr ->
38 Range <$> go lowExpr <*> go highExpr
40 ExplicitList expressions ->
41 ExplicitList <$> mapM go expressions
43 App funcExpr argExpr ->
44 App <$> go funcExpr <*> go argExpr
47 MultiIf <$> mapM (\(b,e) -> (,) <$> go b <*> go e) branches
49 Access record field ->
50 Access <$> go record <*> return field
52 Remove record field ->
53 Remove <$> go record <*> return field
55 Insert record field expr ->
56 Insert <$> go record <*> return field <*> go expr
58 Modify record fields ->
61 <*> mapM (\(field,expr) -> (,) field <$> go expr) fields
64 Record <$> mapM (\(field,expr) -> (,) field <$> go expr) fields
67 Let <$> defsTransform defs <*> go body
69 GLShader uid src gltipe ->
70 return $ GLShader uid src gltipe
73 return $ Input name tipe
75 Output name tipe expr ->
76 Output name tipe <$> go expr
78 LoopbackIn name source ->
79 return (LoopbackIn name source)
81 LoopbackOut name expr ->
82 LoopbackOut name <$> go expr
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