@@ -7,15 +7,19 @@ import AST.Expression.General
7import qualified AST.Expression.Canonical as Canonical
7import qualified AST.Expression.Canonical as Canonical
8import AST.Type (Type, CanonicalType)
8import AST.Type (Type, CanonicalType)
10−crawlLet :: ([def] -> Either a [def'])
11+ :: ([def] -> Either a [def'])
11− -> Expr ann def var
12+ -> Expr ann def var
12− -> Either a (Expr ann def' var)
13+ -> Either a (Expr ann def' var)
13−crawlLet = crawl (\_ _ -> return ()) (\_ _ -> return ())
15+ crawl (\_ _ -> return ()) (\_ _ -> return ())
15−checkPorts :: (String -> CanonicalType -> Either a ())
19+ :: (String -> CanonicalType -> Either a ())
16− -> (String -> CanonicalType -> Either a ())
20+ -> (String -> CanonicalType -> Either a ())
17− -> Canonical.Expr
21+ -> Canonical.Expr
18− -> Either a Canonical.Expr
22+ -> Either a Canonical.Expr
19checkPorts inCheck outCheck expr =
23checkPorts inCheck outCheck expr =
20 crawl inCheck outCheck (mapM checkDef) expr
24 crawl inCheck outCheck (mapM checkDef) expr
@@ -23,37 +27,77 @@ checkPorts inCheck outCheck expr =
23 do _ <- checkPorts inCheck outCheck body
27 do _ <- checkPorts inCheck outCheck body
24 return def
28 return def
26−crawl :: (String -> Type var -> Either a ())
32+ :: (String -> Type var -> Either a ())
27− -> (String -> Type var -> Either a ())
33+ -> (String -> Type var -> Either a ())
28− -> ([def] -> Either a [def'])
34+ -> ([def] -> Either a [def'])
29− -> Expr ann def var
35+ -> Expr ann def var
30− -> Either a (Expr ann def' var)
36+ -> Either a (Expr ann def' var)
31−crawl portInCheck portOutCheck defsTransform = go
37+crawl portInCheck portOutCheck defsTransform =
33− go (A srcSpan expr) =
40+ go (A srcSpan expr) =
34− A srcSpan <$>
41+ A srcSpan <$>
35− case expr of
42+ case expr of
36− Var x -> return (Var x)
44+ return (Var x)
37− Lambda p e -> Lambda p <$> go e
47+ Lambda p <$> go e
38− Binop op e1 e2 -> Binop op <$> go e1 <*> go e2
50+ Binop op <$> go e1 <*> go e2
39− Case e cases -> Case <$> go e <*> mapM (\(p,b) -> (,) p <$> go b) cases
53+ Case <$> go e <*> mapM (\(p,b) -> (,) p <$> go b) cases
40− Data name es -> Data name <$> mapM go es
56+ Data name <$> mapM go es
41− Literal lit -> return (Literal lit)
59+ return (Literal lit)
42− Range e1 e2 -> Range <$> go e1 <*> go e2
62+ Range <$> go e1 <*> go e2
43− ExplicitList es -> ExplicitList <$> mapM go es
65+ ExplicitList <$> mapM go es
44− App e1 e2 -> App <$> go e1 <*> go e2
68+ App <$> go e1 <*> go e2
45− MultiIf branches -> MultiIf <$> mapM (\(b,e) -> (,) <$> go b <*> go e) branches
71+ MultiIf <$> mapM (\(b,e) -> (,) <$> go b <*> go e) branches
46− Access e lbl -> Access <$> go e <*> return lbl
74+ Access <$> go e <*> return lbl
47− Remove e lbl -> Remove <$> go e <*> return lbl
77+ Remove <$> go e <*> return lbl
48− Insert e lbl v -> Insert <$> go e <*> return lbl <*> go v
80+ Insert <$> go e <*> return lbl <*> go v
49− Modify e fields -> Modify <$> go e <*> mapM (\(k,v) -> (,) k <$> go v) fields
83+ Modify <$> go e <*> mapM (\(k,v) -> (,) k <$> go v) fields
50− Record fields -> Record <$> mapM (\(k,v) -> (,) k <$> go v) fields
86+ Record <$> mapM (\(k,v) -> (,) k <$> go v) fields
51− Markdown uid md -> return $ Markdown uid md
89+ return $ Markdown uid md
52− Let defs body -> Let <$> defsTransform defs <*> go body
92+ Let <$> defsTransform defs <*> go body
94+ GLShader uid src gltipe ->
53− GLShader uid src gltipe -> return $ GLShader uid src gltipe
95+ return $ GLShader uid src gltipe
54− PortIn name st ->
97+ PortIn name st ->
55− do portInCheck name st
98+ do portInCheck name st
56− return $ PortIn name st
99+ return $ PortIn name st
57− PortOut name st signal ->
101+ PortOut name st signal ->
58− do portOutCheck name st
102+ do portOutCheck name st
59− PortOut name st <$> go signal
103+ PortOut name st <$> go signal