Skip to content

Instantly share code, notes, and snippets.

View bvpav's full-sized avatar

bvpav

View GitHub Profile
@rexim
rexim / rule110.ts
Last active August 21, 2024 05:26
Rule110 Entirely in TypeScript Type System
// tsc -noErrorTruncation rule110.ts | sed 's/\[/\n[/g'
type Tail<Xs extends Array<any>> = Xs extends [infer _, ...infer Rest] ? Rest : never;
type Head<Xs extends Array<any>> = Xs extends [infer X, ...infer _] ? X : never;
type Pair<X, Xs extends Array<X>> = [X, ...Xs]
type Reverse<
Items extends Array<any>,
Acc extends Array<any> = []
> = Items extends [] ? Acc : Reverse<Tail<Items>, Pair<Items[0], Acc>>;