Skip to content

Instantly share code, notes, and snippets.

@bbaaxx
Created March 17, 2024 05:11
Show Gist options
  • Save bbaaxx/80128b4ebb0bf40313061d1df6494833 to your computer and use it in GitHub Desktop.
Save bbaaxx/80128b4ebb0bf40313061d1df6494833 to your computer and use it in GitHub Desktop.
Playing with Birbs
// Kestrel
export const K = a => () => a
// Starling
export const S = a => b => c => a(c)(b(c))
// Idiot : a => a
export const I = S(K)(K)
// Bluebird : a => b => c => a(b(c))
export const B = S(K(S))(K)
// Cardinal : a => b => c => a(c)(b)
export const C = S(B(B)(S))(K(K))
// Trush : a => b => b(a)
export const T = C(I)
// Dove : a => b => c => d => a(b)(c(d))
export const D = B(B)
// Eagle : a => b => c => d => e => a(b)(c(d)(e))
export const E = B(B(B)(B))
// Finch : a => b => c => c(b)(a)
export const F = E(T)(T)(E)(T)
// Goldfinch : a => b => c => d => a(d)(b(c))
export const G = B(B)(C)
// Robin : a => b => c => b(c)(a)
export const R = B(B)(T)
// Mockingbird : a => a(a)
export const M = S(I)(I)
// Warbler : a => b => a(b)(b)
export const W = C(B(M)(R))
// Hummingbird : a => b => c => a(b)(c)(b)
export const H = B(W)(B(C))
// Jay : a => b => c => d => a(b)(a(d)(c))
export const J = B(B(C))(W(B(C)(B(B(B)(B)))))
// Lark : a => b => a(b(b))
export const L = C(B)(M)
// Owl : a => b => b(a(b))
export const O = S(I)
// Queer Bird : a => b => c => b(a(c))
export const Q = C(B)
// Turing : a => b => b(a(a)(b))
export const U = L(O)
// Vireo (aka Pairing) : a => b => c => c(a)(b)
export const V = B(C)(T)
const Y = S(L(L))
// const Y = S(L)(L)
const uY = a => (b => b(b))(b => a(c => b(b)(c)))
const Yu = a => (b => c => a(b(b))(c))(b => c => a(b(b))(c))
const Ye = a => (b => c => a(b(b))(c))(b => c => a(b(b))(c))
// Blackbird : a => b => c => d => a(b(c)(d))
export const B1 = B(B)(B)
// Bunting : a => b => c => d => e => a(b(c)(d)(e))
export const B2 = B(B(B)(B))(B)
// Becard : a => b => c => d => a(b(c(d)))
export const B3 = B(B(B))(B)
// Cardinal (Once Removed) : a => b => c => d => a(b)(d)(c)
export const C_ = B(C)
// Cardinal (Twice Removed) : a => b => c => d => e => a(b)(c)(e)(d)
export const C__ = C_
// Dickcissel : a => b => c => d => e => a(b)(c)(d(e))
export const D1 = B(B(B))
// Dovekies : a => b => c => d => e => a(b(c))(d(e))
export const D2 = B(B)(B(B))
const uF_ = a => b => c => d => a(d)(c)(b)
const F_ = B(C)(R)
const uF__ = a => b => c => d => e => a(b)(e)(d)(c)
const uI_ = a => b => a(b)
const uI__ = a => b => c => a(b)(c)
const uM2 = a => b => a(b)(a(b))
const uQ1 = a => b => c => a(c(b))
const uQ2 = a => b => c => b(c(a))
const uQ3 = a => b => c => c(a(b))
const uQ4 = a => b => c => c(b(a))
const uR_ = a => b => c => d => a(c)(d)(b)
const uR__ = a => b => c => d => e => a(b)(d)(e)(c)
const uV_ = a => b => c => d => a(c)(b)(d)
const uV__ = a => b => c => d => e => a(b)(e)(c)(d)
const uW_ = a => b => c => a(b)(c)(c)
const uW__ = a => b => c => d => a(b)(c)(d)(d)
const uW1 = a => b => b(a)(a)
const sumXY = x => y => x + y
const sumXYZ = x => y => z => x + y + z
const sumWXYZ = w => x => y => z => w + x + y + z
const multXY = x => y => x * y
const add2 = sumXY(2)
const by2 = multXY(2)
const by10 = multXY(10)
const ops = {
K: K(80)("whatevs"),
S: S(multXY)(add2)(8),
I: I(80),
B: B(by10)(add2)(6),
C: C(sumXY)(70)(10),
T: T(8)(by10),
D: D(sumXY)(10)(by10)(7),
E: E(sumXY)(10)(sumXY)(40)(30),
F: F(8)(10)(multXY),
G: G(sumXY)(by10)(7)(10),
R: R(8)(multXY)(10),
M: M((me, x, n) => 80),
W: W(sumXY)(40),
H: H(sumXYZ)(15)(50),
J: J(sumXY)(40)(30)(10),
L: L(by10)(() => 8),
O: O(() => 8)(by10),
Q: Q(by10)(by2)(4),
U: U(a => b => b(0.8))(by10),
V: V(8)(10)(multXY),
B1: B1(by2)(sumXY)(20)(20),
B2: B2(by10)(sumXYZ)(1)(3)(4),
B3: B3(by10)(add2)(add2)(4),
C_: C_(sumXYZ)(5)(35)(40),
C__: C__(sumWXYZ)(3)(35)(40)(2),
D1: D1(sumXYZ)(10)(30)(by10)(4),
D2: D2(sumXY)(by10)(3)(by10)(5),
}
const test = {
uF_: uF_(sumXYZ)(2)(4)(6),
// F_: F_(sumXYZ)(2)(4)(6),
uY: uY(me => n => (n >= 80 ? n : me(n + 1)))(10),
Y: Y(me => n => (n >= 80 ? n : me(n + 1))),
Yu: Yu(me => n => (n >= 80 ? n : me(n + 1)))(10),
Ye: Ye(me => n => (n >= 80 ? n : me(n + 1)))(10),
}
Object.entries(ops).forEach(([k, v]) =>
console.log(`${k} -> ${v}`),
)
Object.entries(test).forEach(([k, v]) =>
console.log(`Test: ${k} -> ${v}`),
)
export const getNumEqTest = (c) => ([k, v]) =>
it(k, () => expect(v).toEqual(c));
const getTest = getNumEqTest(80);
const sumXY = (x) => (y) => x + y;
const sumXYZ = (x) => (y) => (z) => x + y + z;
const sumWXYZ = (w) => (x) => (y) => (z) => w + x + y + z;
const multXY = (x) => (y) => x * y;
const add2 = sumXY(2);
const by2 = multXY(2);
const by10 = multXY(10);
// Kestrel
const K = (a) => () => a;
getTest(["K", K(80)("whatevs")]);
// Starling
const S = (a) => (b) => (c) => a(c)(b(c));
getTest(["S", S(multXY)(add2)(8)]);
// Idiot : a => a
const I = S(K)(K);
// Bluebird : a => b => c => a(b(c))
const B = S(K(S))(K);
// Cardinal : a => b => c => a(c)(b)
const C = S(B(B)(S))(K(K));
// Trush : a => b => b(a)
const T = C(I);
// Dove : a => b => c => d => a(b)(c(d))
const D = B(B);
// Eagle : a => b => c => d => e => a(b)(c(d)(e))
const E = B(B(B)(B));
// Finch : a => b => c => c(b)(a)
const F = E(T)(T)(E)(T);
// Goldfinch : a => b => c => d => a(d)(b(c))
const G = B(B)(C);
// Robin : a => b => c => b(c)(a)
const R = B(B)(T);
// Mockingbird : a => a(a)
const M = S(I)(I);
// Warbler : a => b => a(b)(b)
const W = C(B(M)(R));
// Hummingbird : a => b => c => a(b)(c)(b)
const H = B(W)(B(C));
// Jay : a => b => c => d => a(b)(a(d)(c))
const J = B(B(C))(W(B(C)(B(B(B)(B)))));
// Lark : a => b => a(b(b))
const L = C(B)(M);
// Owl : a => b => b(a(b))
const O = S(I);
// Queer Bird : a => b => c => b(a(c))
const Q = C(B);
// Turing : a => b => b(a(a)(b))
const U = L(O);
// Vireo (aka Pairing) : a => b => c => c(a)(b)
const V = B(C)(T);
const Y = S(L(L));
// const Y = S(L)(L)
const uY = (a) => ((b) => b(b))((b) => a((c) => b(b)(c)));
const Yu = (a) => ((b) => (c) => a(b(b))(c))((b) => (c) => a(b(b))(c));
const Ye = (a) => ((b) => (c) => a(b(b))(c))((b) => (c) => a(b(b))(c));
// Blackbird : a => b => c => d => a(b(c)(d))
const B1 = B(B)(B);
// Bunting : a => b => c => d => e => a(b(c)(d)(e))
const B2 = B(B(B)(B))(B);
// Becard : a => b => c => d => a(b(c(d)))
const B3 = B(B(B))(B);
// Cardinal (Once Removed) : a => b => c => d => a(b)(d)(c)
const C_ = B(C);
// Cardinal (Twice Removed) : a => b => c => d => e => a(b)(c)(e)(d)
const C__ = C_;
// Dickcissel : a => b => c => d => e => a(b)(c)(d(e))
const D1 = B(B(B));
// Dovekies : a => b => c => d => e => a(b(c))(d(e))
const D2 = B(B)(B(B));
const uF_ = (a) => (b) => (c) => (d) => a(d)(c)(b);
const F_ = B(C)(R);
const uF__ = (a) => (b) => (c) => (d) => (e) => a(b)(e)(d)(c);
const uI_ = (a) => (b) => a(b);
const uI__ = (a) => (b) => (c) => a(b)(c);
const uM2 = (a) => (b) => a(b)(a(b));
const uQ1 = (a) => (b) => (c) => a(c(b));
const uQ2 = (a) => (b) => (c) => b(c(a));
const uQ3 = (a) => (b) => (c) => c(a(b));
const uQ4 = (a) => (b) => (c) => c(b(a));
const uR_ = (a) => (b) => (c) => (d) => a(c)(d)(b);
const uR__ = (a) => (b) => (c) => (d) => (e) => a(b)(d)(e)(c);
const uV_ = (a) => (b) => (c) => (d) => a(c)(b)(d);
const uV__ = (a) => (b) => (c) => (d) => (e) => a(b)(e)(c)(d);
const uW_ = (a) => (b) => (c) => a(b)(c)(c);
const uW__ = (a) => (b) => (c) => (d) => a(b)(c)(d)(d);
const uW1 = (a) => (b) => b(a)(a);
const aps = [
["K", K(80)("whatevs")],
["S", S(multXY)(add2)(8)],
["I", I(80)],
["B", B(by10)(add2)(6)],
["C", C(sumXY)(70)(10)],
["T", T(8)(by10)],
["D", D(sumXY)(10)(by10)(7)],
["E", E(sumXY)(10)(sumXY)(40)(30)],
["F", F(8)(10)(multXY)],
["G", G(sumXY)(by10)(7)(10)],
["R", R(8)(multXY)(10)],
["M", M((me, x, n) => 80)],
["W", W(sumXY)(40)],
["H", H(sumXYZ)(15)(50)],
["J", J(sumXY)(40)(30)(10)],
["L", L(by10)(() => 8)],
["O", O(() => 8)(by10)],
["Q", Q(by10)(by2)(4)],
["U", U((a) => (b) => b(0.8))(by10)],
["V", V(8)(10)(multXY)],
["B1", B1(by2)(sumXY)(20)(20)],
["B2", B2(by10)(sumXYZ)(1)(3)(4)],
["B3", B3(by10)(add2)(add2)(4)],
["C_", C_(sumXYZ)(5)(35)(40)],
["C__", C__(sumWXYZ)(3)(35)(40)(2)],
["D1", D1(sumXYZ)(10)(30)(by10)(4)],
["D2", D2(sumXY)(by10)(3)(by10)(5)]
];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment