function rtexprGlyph() {
return (e) => {
switch (e.TAG) {
case 0: return value()(e._0);
case 1: return M.text({contents: e._0, fontSize: "18px"});
case 2: return createGroup({
"{": M.text({contents: "{", fontSize: "18px"}),
"}": M.text({contents: "}", fontSize: "18px"}),
$arg$: arg => M.text({contents: `(${arg}) =>`, fontSize: "18px"}),
$body$: body => rcexprGlyph()(body),
},
{
"arg->{": [C.alignCenterY, C.hSpace(5)],
"{->body": [C.alignCenterY, C.hSpace(5)],
"body->}": [C.alignCenterY, C.hSpace(5)],
}
)({arg: e._0, body: e._1});
case 3: return createGroup({
$fn$: (fn) => parens(rtexprGlyph()(fn)),
$arg$: (arg) => parens(rtexprGlyph()(arg)),
},
{
"fn->arg": [C.alignCenterY, C.hSpace(5)],
}
)({fn: e._0, arg: e._1});
case 4: return M.text({contents: "Let"});
case 5: return M.text({contents: "Match"});
case 6: return M.text({contents: "Dup"});
case 7: return createGroup({
"dec": M.text({contents: "dec", fontSize: "18px"}),
";": M.text({contents: ";", fontSize: "18px"}),
$x$: x => parens(M.text({contents: x, fontSize: "18px"})),
$e$: rtexprGlyph(),
},
{
"dec->x": [C.alignCenterY, C.hSpace(0)],
"x->;": [C.alignCenterY, C.hSpace(0)],
";->e": [C.alignCenterY, C.hSpace(5)],
}
)({x: e._0, e: e._1});
case 8: return createGroup({
"dec": M.text({contents: "dec", fontSize: "18px"}),
";": M.text({contents: ";", fontSize: "18px"}),
$x$: x => parens(pointer()({_0: x})),
$e$: rtexprGlyph(),
},
{
"dec->x": [C.alignCenterY, C.hSpace(0)],
"x->;": [C.alignCenterY, C.hSpace(0)],
";->e": [C.alignCenterY, C.hSpace(5)],
}
)({x: e._0, e: e._1});
case 9: return M.text({contents: "Shift"});
case 10: return M.text({contents: "Hole"});
}
}
}