import { $, Term, _, _l, g, n } from './core'; import { False, True } from './bool'; n('ord'); export const enum NOrd { LT, EQ, GT, }; export const LT = g('LT', _l(lt => _l(_ => _l(_ => lt)))); export const EQ = g('EQ', _l(_ => _l(eq => _l(_ => eq)))); export const GT = g('GT', _l(_ => _l(_ => _l(gt => gt)))); export const eq = g('eq', _l(l => _l(r => l ._(r._(True)._(False)._(False)) ._(r._(False)._(True)._(False)) ._(r._(False)._(False)._(True))))); export const fromNOrd: (o: NOrd) => Term = o => o === NOrd.LT ? LT : o === NOrd.EQ ? EQ : GT; export const toNOrd: (o: Term) => NOrd = o => $(o._(_(NOrd.LT))._(_(NOrd.EQ))._(_(NOrd.GT)).reduce());