aboutsummaryrefslogtreecommitdiff
path: root/entries/braxtonhall/types/index.ts
diff options
context:
space:
mode:
authorbraxtonhall2022-10-23 19:27:49 +0000
committerbraxtonhall2022-10-23 19:27:49 +0000
commit77ffde450e92ffe6527c35ffc2383b17d4c04f68 (patch)
tree65a560a18f1952114727e05872fce3f149e660e4 /entries/braxtonhall/types/index.ts
parentb5b18e46e3a5c4daaa3b4613395b1a216a47bc17 (diff)
Rename directory to use GitHub ID
Diffstat (limited to 'entries/braxtonhall/types/index.ts')
-rw-r--r--entries/braxtonhall/types/index.ts18
1 files changed, 18 insertions, 0 deletions
diff --git a/entries/braxtonhall/types/index.ts b/entries/braxtonhall/types/index.ts
new file mode 100644
index 0000000..11f4086
--- /dev/null
+++ b/entries/braxtonhall/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};