@@ -16,6 +16,8 @@ combineAnnotations = go
16 msg x = "Syntax Error: The type annotation for '" ++ x ++
16 msg x = "Syntax Error: The type annotation for '" ++ x ++
17 "' must be directly above its definition."
17 "' must be directly above its definition."
19+ exprCombineAnnotations = Expr.crawlLet Def.combineAnnotations
19 go decls =
21 go decls =
20 case decls of
22 case decls of
21 -- simple cases, pass them through with no changes
23 -- simple cases, pass them through with no changes
@@ -34,14 +36,14 @@ combineAnnotations = go
34 D.Definition def : defRest ->
36 D.Definition def : defRest ->
35 case def of
37 case def of
36 Def pat expr ->
38 Def pat expr ->
37− do expr' <- Expr.crawl Def.combineAnnotations expr
39+ do expr' <- exprCombineAnnotations expr
38 let def' = E.Definition pat expr' Nothing
40 let def' = E.Definition pat expr' Nothing
39 (:) (D.Definition def') <$> go defRest
41 (:) (D.Definition def') <$> go defRest
41 TypeAnnotation name tipe ->
43 TypeAnnotation name tipe ->
42 case defRest of
44 case defRest of
43 D.Definition (Def pat@(P.PVar name') expr) : rest | name == name' ->
45 D.Definition (Def pat@(P.PVar name') expr) : rest | name == name' ->
44− do expr' <- Expr.crawl Def.combineAnnotations expr
46+ do expr' <- exprCombineAnnotations expr
45 let def' = E.Definition pat expr' (Just tipe)
47 let def' = E.Definition pat expr' (Just tipe)
46 (:) (D.Definition def') <$> go rest
48 (:) (D.Definition def') <$> go rest
@@ -55,11 +57,11 @@ combineAnnotations = go
55 PortAnnotation name tipe ->
57 PortAnnotation name tipe ->
56 case portRest of
58 case portRest of
57 Port (SendDefinition name' expr) : rest | name == name' ->
59 Port (SendDefinition name' expr) : rest | name == name' ->
58− do expr' <- Expr.crawl Def.combineAnnotations expr
60+ do expr' <- exprCombineAnnotations expr
59 (:) (Port (Send name expr' tipe)) <$> go rest
61 (:) (Port (Send name expr' tipe)) <$> go rest
61 Port (RecvDefinition name' expr) : rest | name == name' ->
63 Port (RecvDefinition name' expr) : rest | name == name' ->
62− do expr' <- Expr.crawl Def.combineAnnotations expr
64+ do expr' <- exprCombineAnnotations expr
63 (:) (Port (Recv name expr' tipe)) <$> go rest
65 (:) (Port (Recv name expr' tipe)) <$> go rest
65 _ -> Left (msg name)
67 _ -> Left (msg name)