aboutsummaryrefslogtreecommitdiff
path: root/entries/braxtonh/types/index.ts
diff options
context:
space:
mode:
authorbraxtonhall2022-10-23 18:20:39 +0000
committerbraxtonhall2022-10-23 18:20:39 +0000
commitb5b18e46e3a5c4daaa3b4613395b1a216a47bc17 (patch)
tree13312c71c0a2968cb34f86527a82bb1e33abb4b0 /entries/braxtonh/types/index.ts
Initial commit
Diffstat (limited to 'entries/braxtonh/types/index.ts')
-rw-r--r--entries/braxtonh/types/index.ts18
1 files changed, 18 insertions, 0 deletions
diff --git a/entries/braxtonh/types/index.ts b/entries/braxtonh/types/index.ts
new file mode 100644
index 0000000..11f4086
--- /dev/null
+++ b/entries/braxtonh/types/index.ts
@@ -0,0 +1,18 @@
+type Zero = "😰";
+
+type Succ<N> = {prev: N};
+
+type Prev<N> = N extends Succ<infer P> ? P : never;
+
+type Add<A, B> = B extends Zero ? A : Succ<Add<A, Prev<B>>>;
+
+type _Fib<N, AccumulatorA, AccumulatorB> =
+ N extends Zero
+ ? AccumulatorA
+ : N extends Succ<Zero>
+ ? AccumulatorB
+ : _Fib<Prev<N>, AccumulatorB, Add<AccumulatorA, AccumulatorB>>;
+
+type Fib<N> = _Fib<N, Zero, Succ<Zero>>;
+
+export type {Zero, Succ, Fib};