@@ -51,74 +51,78 @@ bound boundVars =
53sortDefs :: Canonical.Expr -> Canonical.Expr
53sortDefs :: Canonical.Expr -> Canonical.Expr
54−sortDefs expr =
54+sortDefs expression =
55− evalState (reorder expr) Set.empty
55+ evalState (reorder expression) Set.empty
58reorder :: Canonical.Expr -> State (Set.Set String) Canonical.Expr
58reorder :: Canonical.Expr -> State (Set.Set String) Canonical.Expr
59−reorder (A ann expr) =
59+reorder (A ann expression) =
61− case expr of
61+ case expression of
62 -- Be careful adding and restricting freeVars
62 -- Be careful adding and restricting freeVars
63 Var var ->
63 Var var ->
64− freeIfLocal var >> return expr
64+ do freeIfLocal var
66− Lambda p e ->
67+ Lambda pattern body ->
67− uncurry Lambda <$> bindingReorder (p,e)
68+ uncurry Lambda <$> bindingReorder (pattern,body)
69− Binop op e1 e2 ->
70+ Binop op leftExpr rightExpr ->
70 do freeIfLocal op
71 do freeIfLocal op
71− Binop op <$> reorder e1 <*> reorder e2
72+ Binop op <$> reorder leftExpr <*> reorder rightExpr
73− Case e cases ->
74+ Case expr cases ->
74− Case <$> reorder e <*> mapM bindingReorder cases
75+ Case <$> reorder expr <*> mapM bindingReorder cases
76− Data name es ->
77+ Data name exprs ->
77 do free name
78 do free name
78− Data name <$> mapM reorder es
79+ Data name <$> mapM reorder exprs
80 -- Just pipe the reorder though
81 -- Just pipe the reorder though
81 Literal _ ->
82 Literal _ ->
82− return expr
83+ return expression
84− Range e1 e2 ->
85+ Range lowExpr highExpr ->
85− Range <$> reorder e1 <*> reorder e2
86+ Range <$> reorder lowExpr <*> reorder highExpr
87 ExplicitList es ->
88 ExplicitList es ->
88 ExplicitList <$> mapM reorder es
89 ExplicitList <$> mapM reorder es
90− App e1 e2 ->
91+ App func arg ->
91− App <$> reorder e1 <*> reorder e2
92+ App <$> reorder func <*> reorder arg
93 MultiIf branches ->
94 MultiIf branches ->
94− MultiIf <$> mapM (\(e1,e2) -> (,) <$> reorder e1 <*> reorder e2) branches
95+ MultiIf <$> mapM (\(cond,branch) -> (,) <$> reorder cond <*> reorder branch) branches
96− Access e lbl ->
97+ Access record field ->
97− Access <$> reorder e <*> return lbl
98+ Access <$> reorder record <*> return field
99− Remove e lbl ->
100+ Remove record field ->
100− Remove <$> reorder e <*> return lbl
101+ Remove <$> reorder record <*> return field
102− Insert e lbl v ->
103+ Insert record field expr ->
103− Insert <$> reorder e <*> return lbl <*> reorder v
104+ Insert <$> reorder record <*> return field <*> reorder expr
105− Modify e fields ->
106+ Modify record fields ->
106− Modify <$> reorder e <*> mapM (\(k,v) -> (,) k <$> reorder v) fields
109+ <*> mapM (\(field,expr) -> (,) field <$> reorder expr) fields
108 Record fields ->
111 Record fields ->
109− Record <$> mapM (\(k,v) -> (,) k <$> reorder v) fields
113+ <$> mapM (\(field,expr) -> (,) field <$> reorder expr) fields
111 GLShader _ _ _ ->
115 GLShader _ _ _ ->
112− return expr
116+ return expression
114− Input name st ->
118+ Input name tipe ->
115− return $ Input name st
119+ return $ Input name tipe
117− Output name st signal ->
121+ Output name tipe signal ->
118− Output name st <$> reorder signal
122+ Output name tipe <$> reorder signal
120− Loopback name st maybeExpr ->
124+ Loopback name tipe maybeExpr ->
121− Loopback name st <$>
125+ Loopback name tipe <$>
122 maybe (return Nothing) (fmap Just . reorder) maybeExpr
126 maybe (return Nothing) (fmap Just . reorder) maybeExpr
124 -- Actually do some reordering
128 -- Actually do some reordering