Skip to content

Commit 415cda9

Browse files
author
benji6
committed
no more semicolons
1 parent 9514cc5 commit 415cda9

File tree

3 files changed

+120
-120
lines changed

3 files changed

+120
-120
lines changed

README.md

+67-67
Original file line numberDiff line numberDiff line change
@@ -13,109 +13,109 @@ You may also consume the ES2015 source directly using [Rollup](https://github.co
1313
```javascript
1414
import {
1515
B, C, D, E, F, G, H, I, J, K, KI, L, M, O, Q, R, S, T, U, V, W, Y,
16-
} from 'combinators-js';
16+
} from 'combinators-js'
1717

1818
// or use require or whatever, but you're good to go!
1919
```
2020

2121
Here are the included combinators with their definitions (they are transpiled to standard functions so will run in any JS evironmment):
2222

2323
```javascript
24-
const B = a => b => c => a(b(c));
25-
const C = a => b => c => a(c)(b);
26-
const D = a => b => c => d => a(b)(c(d));
27-
const E = a => b => c => d => e => a(b)(c(d)(e));
28-
const F = a => b => c => c(b)(a);
29-
const G = a => b => c => d => a(d)(b(c));
30-
const H = a => b => c => a(b)(c)(b);
31-
const I = a => a;
32-
const J = a => b => c => d => a(b)(a(d)(c));
33-
const K = a => b => a;
34-
const KI = a => b => b;
35-
const L = a => b => a(b(b));
36-
const M = a => a(a);
37-
const O = a => b => b(a(b));
38-
const Q = a => b => c => b(a(c));
39-
const R = a => b => c => b(c)(a);
40-
const S = a => b => c => a(c)(b(c));
41-
const T = a => b => b(a);
42-
const U = a => b => b(a(a)(b));
43-
const V = a => b => c => c(a)(b);
44-
const W = a => b => a(b)(b);
45-
const Y = a => (b => b(b))(b => a(c => b(b)(c)));
24+
const B = a => b => c => a(b(c))
25+
const C = a => b => c => a(c)(b)
26+
const D = a => b => c => d => a(b)(c(d))
27+
const E = a => b => c => d => e => a(b)(c(d)(e))
28+
const F = a => b => c => c(b)(a)
29+
const G = a => b => c => d => a(d)(b(c))
30+
const H = a => b => c => a(b)(c)(b)
31+
const I = a => a
32+
const J = a => b => c => d => a(b)(a(d)(c))
33+
const K = a => b => a
34+
const KI = a => b => b
35+
const L = a => b => a(b(b))
36+
const M = a => a(a)
37+
const O = a => b => b(a(b))
38+
const Q = a => b => c => b(a(c))
39+
const R = a => b => c => b(c)(a)
40+
const S = a => b => c => a(c)(b(c))
41+
const T = a => b => b(a)
42+
const U = a => b => b(a(a)(b))
43+
const V = a => b => c => c(a)(b)
44+
const W = a => b => a(b)(b)
45+
const Y = a => (b => b(b))(b => a(c => b(b)(c)))
4646
```
4747

4848
Here are the tests:
4949

5050
```javascript
51-
test('B')(S(K(S))(K));
52-
test('C')(S(S(K(S(K(S))(K)))(S))(K(K)));
53-
test('D')(S(K(S(K(S))(K))));
54-
test('E')(S(K(S(K(S(K(S))(K)))(S(K(S))(K)))));
55-
test('F')(S(K(S(S(K)(K))(K(S(K(S(S(K)(K))))(K)))))(S(K(S(K(S(K(S))(K)))(S(K(S))(K))))(S(K(S(S(K)(K))))(K))));
56-
test('G')(S(K(S(K(S))(K)))(S(S(K(S(K(S))(K)))(S))(K(K))));
57-
test('H')(S(K(S(K(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))))(K)))(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))));
58-
test('I')(S(K)(K));
59-
test('J')(S(K(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))))(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))(K(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))(S(K(S(K(S(K(S))(K)))(S(K(S))(K)))))))));
60-
test('K')(K);
61-
test('KI')(K(S(K)(K)));
62-
test('L')(S(S(K(S))(K))(K(S(S(K)(K))(S(K)(K)))));
63-
test('M')(S(S(K)(K))(S(K)(K)));
64-
test('O')(S(S(K)(K)));
65-
test('Q')(S(K(S(S(K(S))(K))))(K));
66-
test('R')(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K)));
67-
test('S')(S);
68-
test('T')(S(K(S(S(K)(K))))(K));
69-
test('U')(S(K(S(S(K)(K))))(S(S(K)(K))(S(K)(K))));
70-
test('V')(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))(S(K(S(S(K)(K))))(K)));
71-
test('W')(S(K(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))))(K));
51+
test('B')(S(K(S))(K))
52+
test('C')(S(S(K(S(K(S))(K)))(S))(K(K)))
53+
test('D')(S(K(S(K(S))(K))))
54+
test('E')(S(K(S(K(S(K(S))(K)))(S(K(S))(K)))))
55+
test('F')(S(K(S(S(K)(K))(K(S(K(S(S(K)(K))))(K)))))(S(K(S(K(S(K(S))(K)))(S(K(S))(K))))(S(K(S(S(K)(K))))(K))))
56+
test('G')(S(K(S(K(S))(K)))(S(S(K(S(K(S))(K)))(S))(K(K))))
57+
test('H')(S(K(S(K(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))))(K)))(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))))
58+
test('I')(S(K)(K))
59+
test('J')(S(K(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))))(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))(K(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))(S(K(S(K(S(K(S))(K)))(S(K(S))(K)))))))))
60+
test('K')(K)
61+
test('KI')(K(S(K)(K)))
62+
test('L')(S(S(K(S))(K))(K(S(S(K)(K))(S(K)(K)))))
63+
test('M')(S(S(K)(K))(S(K)(K)))
64+
test('O')(S(S(K)(K)))
65+
test('Q')(S(K(S(S(K(S))(K))))(K))
66+
test('R')(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K)))
67+
test('S')(S)
68+
test('T')(S(K(S(S(K)(K))))(K))
69+
test('U')(S(K(S(S(K)(K))))(S(S(K)(K))(S(K)(K))))
70+
test('V')(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))(S(K(S(S(K)(K))))(K)))
71+
test('W')(S(K(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))))(K))
7272
```
7373

7474
Here are some ideas:
7575

7676
```javascript
7777
// LISP data structures
78-
const cons = (a, b) => V(a)(b); // manual uncurry
79-
const car = T(K);
80-
const cdr = T(KI);
78+
const cons = (a, b) => V(a)(b) // manual uncurry
79+
const car = T(K)
80+
const cdr = T(KI)
8181

82-
console.log(car(cons(0, 1))); // => 0
83-
console.log(cdr(cons(0, 1))); // => 1
82+
console.log(car(cons(0, 1))) // => 0
83+
console.log(cdr(cons(0, 1))) // => 1
8484

85-
const nil = () => {};
86-
const list = (...args) => args.reduce((l, arg) => V(arg)(l), nil);
87-
const reverse = (l, m = nil) => l === nil ? m : reverse(l(KI), V(l(K))(m));
85+
const nil = () => {}
86+
const list = (...args) => args.reduce((l, arg) => V(arg)(l), nil)
87+
const reverse = (l, m = nil) => l === nil ? m : reverse(l(KI), V(l(K))(m))
8888
const reduce = f => l => m => l(KI) === undefined ? m : f(reduce(f)(l(KI))(m))(l(K))
89-
const map = f => l => reduce(acc => val => V(f(val))(acc))(l)(nil);
90-
const length = l => reduce(acc => val => 1 + acc)(l)(0);
91-
const filter = f => l => reduce(acc => val => f(val) ? V(val)(acc) : acc)(l)(nil);
89+
const map = f => l => reduce(acc => val => V(f(val))(acc))(l)(nil)
90+
const length = l => reduce(acc => val => 1 + acc)(l)(0)
91+
const filter = f => l => reduce(acc => val => f(val) ? V(val)(acc) : acc)(l)(nil)
9292

93-
const arbitraryList = list(0, 1, 2, 3, 4, 5);
93+
const arbitraryList = list(0, 1, 2, 3, 4, 5)
9494

95-
console.log(length(arbitraryList)); // => 6
95+
console.log(length(arbitraryList)) // => 6
9696

97-
const reduced = reduce(acc => val => V(val)(acc))(arbitraryList)(nil);
98-
const filtered = filter(x => x > 2)(reduced);
99-
const mapped = map(x => x ** 2)(filtered);
100-
const reversed = reverse(mapped);
97+
const reduced = reduce(acc => val => V(val)(acc))(arbitraryList)(nil)
98+
const filtered = filter(x => x > 2)(reduced)
99+
const mapped = map(x => x ** 2)(filtered)
100+
const reversed = reverse(mapped)
101101

102-
console.log(length(reversed)); // => 3
103-
map(::console.log)(reversed); // => 25 16 9
102+
console.log(length(reversed)) // => 3
103+
map(::console.log)(reversed) // => 25 16 9
104104
```
105105

106106
```javascript
107107
// recursion of anonymous functions
108-
Y(recur => x => (x === 1 ? 1 : x * recur(x - 1)))(5); // => 120
108+
Y(recur => x => (x === 1 ? 1 : x * recur(x - 1)))(5) // => 120
109109

110110
// TCO'd recursion of anonymous functions using a modified Y
111111
// taking a variadic non-combinator function
112-
const Y_ = a => (b => a((...c) => b(b)(...c)))(b => a((...c) => b(b)(...c)));
113-
Y_(recur => (x, y = 1) => x === 1 ? y : recur(x - 1, x * y))(5); // => 120
112+
const Y_ = a => (b => a((...c) => b(b)(...c)))(b => a((...c) => b(b)(...c)))
113+
Y_(recur => (x, y = 1) => x === 1 ? y : recur(x - 1, x * y))(5) // => 120
114114
```
115115

116116
```javascript
117117
// omega bird (mock a mockingbird)
118-
M(M);
118+
M(M)
119119
```
120120

121121
Here are some practical ideas:

index.es6.js

+22-22
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
export const B = a => b => c => a(b(c));
2-
export const C = a => b => c => a(c)(b);
3-
export const D = a => b => c => d => a(b)(c(d));
4-
export const E = a => b => c => d => e => a(b)(c(d)(e));
5-
export const F = a => b => c => c(b)(a);
6-
export const G = a => b => c => d => a(d)(b(c));
7-
export const H = a => b => c => a(b)(c)(b);
8-
export const I = a => a;
9-
export const J = a => b => c => d => a(b)(a(d)(c));
10-
export const K = a => b => a;
11-
export const KI = a => b => b;
12-
export const L = a => b => a(b(b));
13-
export const M = a => a(a);
14-
export const O = a => b => b(a(b));
15-
export const Q = a => b => c => b(a(c));
16-
export const R = a => b => c => b(c)(a);
17-
export const S = a => b => c => a(c)(b(c));
18-
export const T = a => b => b(a);
19-
export const U = a => b => b(a(a)(b));
20-
export const V = a => b => c => c(a)(b);
21-
export const W = a => b => a(b)(b);
22-
export const Y = a => (b => b(b))(b => a(c => b(b)(c)));
1+
export const B = a => b => c => a(b(c))
2+
export const C = a => b => c => a(c)(b)
3+
export const D = a => b => c => d => a(b)(c(d))
4+
export const E = a => b => c => d => e => a(b)(c(d)(e))
5+
export const F = a => b => c => c(b)(a)
6+
export const G = a => b => c => d => a(d)(b(c))
7+
export const H = a => b => c => a(b)(c)(b)
8+
export const I = a => a
9+
export const J = a => b => c => d => a(b)(a(d)(c))
10+
export const K = a => b => a
11+
export const KI = a => b => b
12+
export const L = a => b => a(b(b))
13+
export const M = a => a(a)
14+
export const O = a => b => b(a(b))
15+
export const Q = a => b => c => b(a(c))
16+
export const R = a => b => c => b(c)(a)
17+
export const S = a => b => c => a(c)(b(c))
18+
export const T = a => b => b(a)
19+
export const U = a => b => b(a(a)(b))
20+
export const V = a => b => c => c(a)(b)
21+
export const W = a => b => a(b)(b)
22+
export const Y = a => (b => b(b))(b => a(c => b(b)(c)))

test.js

+31-31
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
1-
import tape from 'tape';
2-
import * as combinators from './index.es6';
1+
import tape from 'tape'
2+
import * as combinators from './index.es6'
33

4-
const {K, S, Y} = combinators;
5-
const [a, b, c, d, e] = Array.from({length: 5}, () => K(K(K(K(K(K(K)))))));
4+
const {K, S, Y} = combinators
5+
const [a, b, c, d, e] = Array.from({length: 5}, () => K(K(K(K(K(K(K)))))))
66

77
const equal = x => y => t => {
8-
t.equal(x(a)(b)(c)(d)(e), y(a)(b)(c)(d)(e));
9-
t.end();
10-
};
11-
const test = x => y => tape(x, equal(combinators[x])(y));
8+
t.equal(x(a)(b)(c)(d)(e), y(a)(b)(c)(d)(e))
9+
t.end()
10+
}
11+
const test = x => y => tape(x, equal(combinators[x])(y))
1212

13-
test('B')(S(K(S))(K));
14-
test('C')(S(S(K(S(K(S))(K)))(S))(K(K)));
15-
test('D')(S(K(S(K(S))(K))));
16-
test('E')(S(K(S(K(S(K(S))(K)))(S(K(S))(K)))));
17-
test('F')(S(K(S(S(K)(K))(K(S(K(S(S(K)(K))))(K)))))(S(K(S(K(S(K(S))(K)))(S(K(S))(K))))(S(K(S(S(K)(K))))(K))));
18-
test('G')(S(K(S(K(S))(K)))(S(S(K(S(K(S))(K)))(S))(K(K))));
19-
test('H')(S(K(S(K(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))))(K)))(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))));
20-
test('I')(S(K)(K));
21-
test('J')(S(K(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))))(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))(K(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))(S(K(S(K(S(K(S))(K)))(S(K(S))(K)))))))));
22-
test('K')(K);
23-
test('KI')(K(S(K)(K)));
24-
test('L')(S(S(K(S))(K))(K(S(S(K)(K))(S(K)(K)))));
25-
test('M')(S(S(K)(K))(S(K)(K)));
26-
test('O')(S(S(K)(K)));
27-
test('Q')(S(K(S(S(K(S))(K))))(K));
28-
test('R')(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K)));
29-
test('S')(S);
30-
test('T')(S(K(S(S(K)(K))))(K));
31-
test('U')(S(K(S(S(K)(K))))(S(S(K)(K))(S(K)(K))));
32-
test('V')(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))(S(K(S(S(K)(K))))(K)));
33-
test('W')(S(K(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))))(K));
34-
test('Y')(Y);
35-
// test('Y')(Y)(S(S)(K)(S(K(S(S)(S(S(S))(K)))))(K));
13+
test('B')(S(K(S))(K))
14+
test('C')(S(S(K(S(K(S))(K)))(S))(K(K)))
15+
test('D')(S(K(S(K(S))(K))))
16+
test('E')(S(K(S(K(S(K(S))(K)))(S(K(S))(K)))))
17+
test('F')(S(K(S(S(K)(K))(K(S(K(S(S(K)(K))))(K)))))(S(K(S(K(S(K(S))(K)))(S(K(S))(K))))(S(K(S(S(K)(K))))(K))))
18+
test('G')(S(K(S(K(S))(K)))(S(S(K(S(K(S))(K)))(S))(K(K))))
19+
test('H')(S(K(S(K(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))))(K)))(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))))
20+
test('I')(S(K)(K))
21+
test('J')(S(K(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))))(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))(K(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))(S(K(S(K(S(K(S))(K)))(S(K(S))(K)))))))))
22+
test('K')(K)
23+
test('KI')(K(S(K)(K)))
24+
test('L')(S(S(K(S))(K))(K(S(S(K)(K))(S(K)(K)))))
25+
test('M')(S(S(K)(K))(S(K)(K)))
26+
test('O')(S(S(K)(K)))
27+
test('Q')(S(K(S(S(K(S))(K))))(K))
28+
test('R')(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K)))
29+
test('S')(S)
30+
test('T')(S(K(S(S(K)(K))))(K))
31+
test('U')(S(K(S(S(K)(K))))(S(S(K)(K))(S(K)(K))))
32+
test('V')(S(K(S(S(K(S(K(S))(K)))(S))(K(K))))(S(K(S(S(K)(K))))(K)))
33+
test('W')(S(K(S(S(K(S(S(K)(K))(S(K)(K))))(S(K(S(K(S))(K)))(S(K(S(S(K)(K))))(K))))))(K))
34+
test('Y')(Y)
35+
// test('Y')(Y)(S(S)(K)(S(K(S(S)(S(S(S))(K)))))(K))

0 commit comments

Comments
 (0)