Skip to content

Instantly share code, notes, and snippets.


Rico Kahler ricokahler

View GitHub Profile
ricokahler /
Created Jun 11, 2021
another proof of turning completeness — 4 years later

there's a somewhat older github issue in the typescript repo that made the observation that typescript was turning complete

linked was also a proof via implement a turing machine within the typesystem.

that proof no longer works, and with the addition of template literal types, there comes a much more straightforward way to do this. that's what this is — a proof that typescript's type system is turning complete, 4 years later

see [here](

View register.js
const path = require('path');
require('@babel/register')({ extensions: ['.js', '.ts', '.tsx'] });
const args = process.argv.slice(2);
if (args[0] === '--') {
const filename = args[1];
// require relative to the root
require(path.resolve(__dirname, '../', filename));
ricokahler / index.js
Last active May 23, 2020
color2k in one file
View index.js
import parseToRgba from '@color2k/parse-to-rgba';
export { default as parseToRgba } from '@color2k/parse-to-rgba';
// taken from:
* Parses a color in hue, saturation, lightness, and the alpha channel.
* Hue is a number between 0 and 360, saturation, lightness, and alpha are
* decimal percentages between 0 and 1
ricokahler / memoIgnoringFunctions.js
Last active Sep 19, 2019
React.memo but it ignores functions changes
View memoIgnoringFunctions.js
import React, { memo, useMemo, useLayoutEffect, useRef } from 'react';
import objectHash from 'object-hash';
import _partition from 'lodash/partition';
import _fromPairs from 'lodash/fromPairs';
* an HOC that uses `React.memo` to memoize component expect it ignores changes
* to functions while also keeping those functions up-to-date somehow
function memoIgnoringFunctions(Component, propsAreEqual) {
ricokahler / Component.js
Created Sep 19, 2019
Only add the event listener once
View Component.js
import React, { useCallback } from 'react';
function usePullValue(value) {
const ref = useRef(value);
useLayoutEffect(() => {
ref.current = value;
}, [value]);
return useCallback(() => {
ricokahler / api.ts
Last active Jul 3, 2018
Retain Data API
View api.ts
interface Request {
queries: Array<Query>;
filters?: Filter;
interface Response extends Array<Result> {}
interface Result {
id: string;
results: Array<number>;
ricokahler / .gitignore
Last active Jun 7, 2018
Material-ui typescript bug
View .gitignore
ricokahler / map-reduce.ts
Created Apr 7, 2018
map - reduce in javascript
View map-reduce.ts
class Something {
foo: string;
bar: string;
x: number;
constructor(x: number) {
this.x = x; = 'foo'; = 'bar';
ricokahler / index.html
Last active Mar 9, 2018
simple web app
View index.html
<title>what up</title>
<h1 class="foo"></h1>
<div class="stuff"></div>
async function loadData() {
const response = await fetch('');
View map-promises.ts
export async function sequentially<T, R>(list: T[], asyncFunction: (t: T) => Promise<R>) {
const newList = [] as R[];
for (const i of list) {
newList.push(await asyncFunction(i));
return newList;
// then use like so: