@@ -83,7 +83,7 @@ literals = mkPattern' match'
83 , prettyPrintIL' value
83 , prettyPrintIL' value
85 match (App _ val []) = mconcat <$> sequence
85 match (App _ val []) = mconcat <$> sequence
86− [ return $ emit "EffApply("
86+ [ return $ emit "Run("
87 , prettyPrintIL' val
87 , prettyPrintIL' val
88 , return $ emit ")"
88 , return $ emit ")"
@@ -93,7 +93,7 @@ literals = mkPattern' match'
93 , prettyPrintIL' arg
93 , prettyPrintIL' arg
94 , return $ emit ")"
94 , return $ emit ")"
96− match (App ss (Indexer _ (Var _ fn) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod), x, y])
96+ match (App _ (App _ (App _ (Indexer _ (Var _ fn) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod)]) [x]) [y])
97 | fnMod == dictMod
97 | fnMod == dictMod
98 , dictMod == C.dataEq || dictMod == C.dataSemiring || dictMod == C.dataRing ||
98 , dictMod == C.dataEq || dictMod == C.dataSemiring || dictMod == C.dataRing ||
99 dictMod == C.dataEuclideanRing || dictMod == C.dataHeytingAlgebra || dictMod == C.dataOrd
99 dictMod == C.dataEuclideanRing || dictMod == C.dataHeytingAlgebra || dictMod == C.dataOrd
@@ -104,7 +104,7 @@ literals = mkPattern' match'
104 , return $ emit op
104 , return $ emit op
105 , return $ emit $ unbox' t y
105 , return $ emit $ unbox' t y
107− match (App _ (Indexer _ (Var _ fn) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod), n])
107+ match (App _ (App _ (Indexer _ (Var _ fn) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod)]) [n])
108 | fnMod == dictMod
108 | fnMod == dictMod
109 , dictMod == C.dataRing
109 , dictMod == C.dataRing
110 , fn == C.negate
110 , fn == C.negate
@@ -114,7 +114,7 @@ literals = mkPattern' match'
114 , return $ emit $ unbox' t n
114 , return $ emit $ unbox' t n
115 , return $ emit ")"
115 , return $ emit ")"
117− match (App _ (Indexer _ (Var _ fn) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod), n])
117+ match (App _ (App _ (Indexer _ (Var _ fn) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod)]) [n])
118 | fnMod == dictMod
118 | fnMod == dictMod
119 , dictMod == C.dataHeytingAlgebra
119 , dictMod == C.dataHeytingAlgebra
120 , fn == properToIL C.not
120 , fn == properToIL C.not
@@ -124,6 +124,16 @@ literals = mkPattern' match'
124 , return $ emit $ unbox' t n
124 , return $ emit $ unbox' t n
125 , return $ emit ")"
125 , return $ emit ")"
128+ | (val, args) <- unApp app []
130+ = mconcat <$> sequence
131+ [ return $ emit "Apply("
132+ , prettyPrintIL' val
133+ , return $ emit ", "
134+ , intercalate (emit ", ") <$> forM args prettyPrintIL'
127 match (App _ val args) = mconcat <$> sequence
137 match (App _ val args) = mconcat <$> sequence
128 [ return $ emit "Apply("
138 [ return $ emit "Apply("
129 , prettyPrintIL' val
139 , prettyPrintIL' val
@@ -217,8 +227,8 @@ literals = mkPattern' match'
217 , return $ emit " "
227 , return $ emit " "
218 , prettyPrintIL' sts
228 , prettyPrintIL' sts
220− match (IfElse _ (Binary _ EqualTo cond (BooleanLiteral Nothing True)) thens elses)
230+ match (IfElse _ (Binary _ EqualTo cond (BooleanLiteral Nothing True)) thens elses)
221− | (App ss (Indexer _ (Var _ _) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod), x, y]) <- cond
231+ | (App _ (App _ (App _ (Indexer _ (Var _ _) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod)]) [x]) [y]) <- cond
222 , fnMod == dictMod
232 , fnMod == dictMod
223 , dictMod == C.dataEq || dictMod == C.dataOrd
233 , dictMod == C.dataEq || dictMod == C.dataOrd
224 , Just _ <- unboxTypeInt dict
234 , Just _ <- unboxTypeInt dict
@@ -361,6 +371,10 @@ isComplexLiteral ObjectLiteral{} = True
361isComplexLiteral ArrayLiteral{} = True
371isComplexLiteral ArrayLiteral{} = True
362isComplexLiteral _ = False
372isComplexLiteral _ = False
374+unApp :: AST -> [AST] -> (AST, [AST])
375+unApp (App _ val [arg]) args = unApp val (arg : args)
376+unApp other args = (other, args)
364prettyStatements :: (Emit gen) => [AST] -> StateT PrinterState Maybe gen
378prettyStatements :: (Emit gen) => [AST] -> StateT PrinterState Maybe gen
365prettyStatements sts = do
379prettyStatements sts = do
366 ils <- forM sts prettyPrintIL'
380 ils <- forM sts prettyPrintIL'
@@ -521,7 +535,7 @@ implFooterSource mn foreigns =
521 mainSource :: Text
535 mainSource :: Text
522 mainSource = "\
536 mainSource = "\
523 \func main() {\n\
537 \func main() {\n\
524− \ EffApply(PS__main())\n\
538+ \ Run(PS__main())\n\