Debugging
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { toNative as $$, L, P, _, fromNative as __ } from './core';
|
||||
import { EQ, GT, LT, Ord } from './ord';
|
||||
import { String, fromString as _s } from './string';
|
||||
|
||||
export type Bool = L<<T extends P>(t: T) => L<(f: T) => T>>;
|
||||
|
||||
@@ -42,6 +43,9 @@ export const or: L<(l: Bool) => L<(r: Bool) => Bool>>
|
||||
export const xor: L<(l: Bool) => L<(r: Bool) => Bool>>
|
||||
= _(l => _(r => l._(not._(r))._(r)));
|
||||
|
||||
export const show: L<(b: Bool) => String>
|
||||
= _(b => iif._(b)._(_s('True'))._(_s('False')));
|
||||
|
||||
export const fromBoolean: (b: boolean) => Bool
|
||||
= b => b ? True : False;
|
||||
|
||||
|
||||
+7
-21
@@ -1,30 +1,16 @@
|
||||
import { L, _ } from './core';
|
||||
import { Bool } from './bool';
|
||||
import { toNumber as $n, Num, Zero, fromNumber as _n, cmp as cmpn, eq as eqn, ge as gen, gt as gtn, le as len, lt as ltn } from './num';
|
||||
import { Ord } from 'src/ord';
|
||||
import { toNumber as $n, Byte, fromNumber as _n, x00 } from './byte';
|
||||
import { Empty, String, cons } from './string';
|
||||
|
||||
export type Char = Num;
|
||||
export type Char = Byte;
|
||||
|
||||
export const Null: Char
|
||||
= Zero;
|
||||
= x00;
|
||||
|
||||
export const cmp: L<(l: Char) => L<(r: Char) => Ord>>
|
||||
= cmpn;
|
||||
export { inc, dec, ifz as ifn, cmp, lt, le, eq, ge, gt } from './byte';
|
||||
|
||||
export const lt: L<(l: Char) => L<(r: Char) => Bool>>
|
||||
= ltn;
|
||||
|
||||
export const le: L<(l: Char) => L<(r: Char) => Bool>>
|
||||
= len;
|
||||
|
||||
export const eq: L<(l: Char) => L<(r: Char) => Bool>>
|
||||
= eqn;
|
||||
|
||||
export const ge: L<(l: Char) => L<(r: Char) => Bool>>
|
||||
= gen;
|
||||
|
||||
export const gt: L<(l: Char) => L<(r: Char) => Bool>>
|
||||
= gtn;
|
||||
export const show: L<(c: Char) => String>
|
||||
= _(c => cons._(fromChar('\''))._(cons._(c)._(cons._(fromChar('\''))._(Empty))));
|
||||
|
||||
export const fromChar: (c: string) => Char
|
||||
= c => _n(c.charCodeAt(0));
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import { L, P, _ } from './core';
|
||||
import { String, toString } from './string';
|
||||
|
||||
export const log: L<<T extends P>(s: String) => L<(p: T) => T>>
|
||||
= _(s => _(p => {
|
||||
console.log(toString(s));
|
||||
return p;
|
||||
}));
|
||||
+25
-3
@@ -1,7 +1,8 @@
|
||||
import { toNative as $$, L, P, _, fromNative as __, undef } from './core';
|
||||
import { EQ, GT, LT, Ord, eq as eqc } from './ord';
|
||||
import { Bool, False, True, and, iif, or } from './bool';
|
||||
import { Num } from 'src/num';
|
||||
import { Num, Zero, succ } from './num';
|
||||
import { String, fromString as _s } from './string';
|
||||
|
||||
export type List<T extends P> = L<<R extends P>(z: R) => L<(f: L<(x: T) => L<(xs: List<T>) => R>>) => R>>;
|
||||
|
||||
@@ -14,8 +15,21 @@ export const Cons: L<<T extends P>(x: T) => L<(xs: List<T>) => List<T>>>
|
||||
export const cons: L<<T extends P>(x: T) => L<(xs: List<T>) => List<T>>>
|
||||
= Cons;
|
||||
|
||||
export const concat: L<<T extends P>(l: List<T>) => L<(r: List<T>) => List<T>>>
|
||||
= _(l => _(r => l._(r)._(_(x => _(xs => cons._(x)._(concat._(xs)._(r)))))));
|
||||
export const snoc: L<<T extends P>(xs: List<T>) => L<(x: T) => List<T>>>
|
||||
= _(<T extends P>(xs: List<T>) =>
|
||||
_((x: T) => xs._(cons._(x)._(Nil))._(_(y => _(ys => cons._(y)._(snoc._(ys)._(x)))))));
|
||||
|
||||
export const nul: L<<T extends P>(xs: List<T>) => Bool>
|
||||
= _(xs => xs._(True)._(_(_x => _(_xs => False))));
|
||||
|
||||
export const len: L<<T extends P>(xs: List<T>) => Num>
|
||||
= _(xs => xs._(Zero)._(_(_x => _(xs => succ._(len._(xs))))));
|
||||
|
||||
export const append: L<<T extends P>(l: List<T>) => L<(r: List<T>) => List<T>>>
|
||||
= _(l => _(r => l._(r)._(_(x => _(xs => cons._(x)._(append._(xs)._(r)))))));
|
||||
|
||||
export const concat: L<<T extends P>(ls: List<List<T>>) => List<T>>
|
||||
= _(ls => ls._(Nil)._(_(x => _(xs => append._(x)._(concat._(xs))))));
|
||||
|
||||
export const head: L<<T extends P>(xs: List<T>) => T>
|
||||
= _(xs => xs._(undef)._(_(x => _(_xs => x))));
|
||||
@@ -114,6 +128,14 @@ export const update: L<<T extends P>(f: L< (p: T) => T>) => L<(i: Num) => L<(xs:
|
||||
export const set: L<<T extends P>(v: T) => L<(i: Num) => L<(xs: List<T>) => List<T>>>>
|
||||
= _(<T extends P>(v: T) => update._<T>(_(_ => v)));
|
||||
|
||||
export const intersperse: L<<T extends P>(v: T) => L<(xs: List<T>) => List<T>>>
|
||||
= _(v => _(xs =>
|
||||
xs._(xs)._(_(x => _(rxs => rxs._(xs)._(_(_rx => _(_rrxs => cons._(x)._(cons._(v)._(intersperse._(v)._(rxs)))))))))));
|
||||
|
||||
export const show: L<<T extends P>(eshow: L<(e: T) => String>) => L<(xs: List<T>) => String>>
|
||||
= _(eshow => _(xs =>
|
||||
concat._(snoc._(cons._(_s('['))._(intersperse._(_s(', '))._(map._(eshow)._(xs))))._(_s(']')))));
|
||||
|
||||
export const fromArray: <T extends P>(xs: T[]) => List<T>
|
||||
= xs => xs.length === 0 ? Nil : Cons._(xs[0])._(new L(() => fromArray(xs.slice(1)).value));
|
||||
|
||||
|
||||
+7
-1
@@ -1,6 +1,7 @@
|
||||
import { toNative as $$, L, P, _, fromNative as __, id } from './core';
|
||||
import { EQ, GT, LT, Ord } from './ord';
|
||||
import { Bool, False, iif, True } from './bool';
|
||||
import { Bool, False, True, iif } from './bool';
|
||||
import { Empty, String, append, cons } from './string';
|
||||
|
||||
export type Num = L<<T extends P>(z: T) => L<(n: L<(p: Num) => T>) => T>>;
|
||||
|
||||
@@ -58,6 +59,11 @@ export const div: L<(l: Num) => L<(r: Num) => Num>>
|
||||
export const mod: L<(l: Num) => L<(r: Num) => Num>>
|
||||
= _(l => _(r => iif._(lt._(l)._(r))._(l)._(mod._(sub._(l)._(r))._(r))));
|
||||
|
||||
export const show: L<(n: Num) => String>
|
||||
= _(n => iif._(lt._(n)._(fromNumber(10)))
|
||||
._(cons._(sum._(n)._(fromNumber(48)))._(Empty))
|
||||
._(append._(show._(div._(n)._(fromNumber(10))))._(show._(mod._(n)._(fromNumber(10))))));
|
||||
|
||||
export const fromNumber: (n: number) => Num
|
||||
= n => !n ? Zero : Succ._(new L(() => fromNumber(n - 1).value));
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { toNative as $$, L, P, _, fromNative as __ } from './core';
|
||||
import { Bool, False, True } from './bool';
|
||||
import { String, fromString as _s } from './string';
|
||||
|
||||
export type Ord = L<<T extends P>(lt: T) => L<(eq: T) => L<(gt: T) => T>>>;
|
||||
|
||||
@@ -24,6 +25,9 @@ export const eq: L<(l: Ord) => L<(r: Ord) => Bool>>
|
||||
._(r._(False)._(True)._(False))
|
||||
._(r._(False)._(False)._(True))));
|
||||
|
||||
export const show: L<(o: Ord) => String>
|
||||
= _(o => o._(_s('LT'))._(_s('EQ'))._(_s('GT')));
|
||||
|
||||
export const fromNOrd: (b: NOrd) => Ord
|
||||
= o => o === NOrd.LT ? LT : o === NOrd.EQ ? EQ : GT;
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { L, P, _ } from './core';
|
||||
import { GT, LT, Ord } from './ord';
|
||||
import { Bool, False, True, and } from './bool';
|
||||
import { Nil, concat, cons } from './list';
|
||||
import { String, fromString as _s } from './string';
|
||||
|
||||
export type Pair<F extends P, S extends P> = L<<R extends P>(f: L<(f: F) => L<(s: S) => R>>) => R>;
|
||||
|
||||
@@ -73,3 +75,9 @@ export const gt: L<<F extends P, S extends P>(fcmp: L<(l: F) => L<(r: F) => Ord>
|
||||
_((l: Pair<F, S>) =>
|
||||
_((r: Pair<F, S>) =>
|
||||
fcmp._(fst._(l))._(fst._(r))._(False)._(scmp._(snd._(l))._(snd._(r))._(False)._(False)._(True))._(True)))));
|
||||
|
||||
export const show: L<<F extends P, S extends P>(fshow: L<(f: F) => String>) => L<(sshow: L<(s: S) => String>) => L<(p: Pair<F, S>) => String>>>
|
||||
= _(<F extends P>(fshow: L<(f: F) => String>) =>
|
||||
_(<S extends P>(sshow: L<(s: S) => String>) =>
|
||||
_((p: Pair<F, S>) =>
|
||||
uncurry._(_(f => _(s => concat._(cons._(_s('('))._(cons._(fshow._(f))._(cons._(_s(', '))._(cons._(sshow._(s))._(cons._(_s(')'))._(Nil)))))))))._(p))));
|
||||
|
||||
+5
-12
@@ -3,21 +3,11 @@ import { Ord } from './ord';
|
||||
import { Bool } from './bool';
|
||||
import { fromNumber as _nn } from './num';
|
||||
import { toChar as $c, Char, fromChar as _c, cmp as cmpc, eq as eqc } from './char';
|
||||
import { Cons as ConsL, List, Nil, cmp as cmpl, concat as concatl, eq as eql, ge as gel, gt as gtl, le as lel, lt as ltl } from './list';
|
||||
import { Cons, List, Nil, cmp as cmpl, concat, cons, eq as eql, ge as gel, gt as gtl, le as lel, lt as ltl } from './list';
|
||||
|
||||
export type String = List<Char>;
|
||||
|
||||
export const Empty: String
|
||||
= Nil;
|
||||
|
||||
export const Cons: L<(c: Char) => L<(s: String) => String>>
|
||||
= ConsL;
|
||||
|
||||
export const cons: L<(c: Char) => L<(s: String) => String>>
|
||||
= Cons;
|
||||
|
||||
export const concat: L<(l: String) => L<(r: String) => String>>
|
||||
= concatl;
|
||||
export { Nil as Empty, nul as empty, len, Cons, cons, snoc, append, get, update, set } from './list';
|
||||
|
||||
export const cmp: L<(l: String) => L<(r: String) => Ord>>
|
||||
= cmpl._(cmpc);
|
||||
@@ -37,6 +27,9 @@ export const ge: L<(l: String) => L<(r: String) => Bool>>
|
||||
export const gt: L<(l: String) => L<(r: String) => Bool>>
|
||||
= gtl._(cmpc);
|
||||
|
||||
export const show: L<(s: String) => String>
|
||||
= _(s => concat._(cons._(fromString('"'))._(cons._(s)._(cons._(fromString('"'))._(Nil)))));
|
||||
|
||||
export const fromString: (xs: string) => String
|
||||
= xs => xs.length === 0 ? Nil : Cons._(_c(xs[0]))._(new L(() => fromString(xs.slice(1)).value));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user