git.iko.soy/rowtype-yoga/purescript-backend-optimizer
on main help sign in
37 lines 1.4 kB history raw
1// @inline export traverseFun1 arity=1
2// @inline export rewriteBottomUpM arity=1
3import * as $runtime from "../runtime.js";
4const $Fun = (tag, _1, _2) => ({tag, _1, _2});
5const Abs = value0 => value1 => $Fun("Abs", value0, value1);
6const App = value0 => value1 => $Fun("App", value0, value1);
7const traverseFun1 = dictApplicative => {
8 const Apply0 = dictApplicative.Apply0();
9 const $0 = Apply0.Functor0();
10 return k => v => {
11 if (v.tag === "Abs") { return $0.map(Abs(v._1))(k(v._2)); }
12 if (v.tag === "App") { return Apply0.apply($0.map(App)(k(v._1)))(k(v._2)); }
13 $runtime.fail();
14 };
15};
16const rewriteBottomUpM = dictMonad => {
17 const Apply0 = dictMonad.Applicative0().Apply0();
18 const $0 = Apply0.Functor0();
19 const $1 = dictMonad.Bind1();
20 return k => {
21 const go = a => {
22 if (a.tag === "Abs") { return $0.map(Abs(a._1))($1.bind(go(a._2))(k)); }
23 if (a.tag === "App") { return Apply0.apply($0.map(App)($1.bind(go(a._1))(k)))($1.bind(go(a._2))(k)); }
24 $runtime.fail();
25 };
26 return a => $1.bind(go(a))(k);
27 };
28};
29const rewriteBottomUp = k => {
30 const go = a => {
31 if (a.tag === "Abs") { return $Fun("Abs", a._1, k(go(a._2))); }
32 if (a.tag === "App") { return $Fun("App", k(go(a._1)), k(go(a._2))); }
33 $runtime.fail();
34 };
35 return a => k(go(a));
36};
37export {$Fun, Abs, App, rewriteBottomUp, rewriteBottomUpM, traverseFun1};