Skip to content

Instantly share code, notes, and snippets.

View atennapel's full-sized avatar

Albert ten Napel atennapel

View GitHub Profile
@atennapel
atennapel / CC.hs
Last active July 4, 2020 06:17
Calculus of Constructions, normalization-by-evaluation, semantic typechecking
data Tm = Var Int | Ann Tm Tm | Abs Tm | App Tm Tm | Pi Tm Tm | Fix Tm | Uni
data Clos = Clos Tm Env
data Dm = DVar Int | DAbs Clos | DNeutral Int [Dm] | DPi Dm Clos | DFix Clos | DUni
type Env = [Dm]
capp :: Clos -> Dm -> Dm
capp (Clos b e) t = eval (t : e) b
vapp :: Dm -> Dm -> Dm
vapp a b =
@atennapel
atennapel / RTValidation.ts
Last active August 23, 2019 15:16
Runtime type validation in TypeScript
type Validator<T> = (val: any) => T | Error;
type ValidatorExtract<V> = V extends Validator<infer T> ? T : never;
type ValidatorMap = { [key: string]: Validator<any> };
const err = (ty: string) => new Error('validate failed: ' + ty);
const nullV: Validator<null> = (val: any) =>
val === null ? val : err('null');
const undefinedV: Validator<undefined> = (val: any) =>
typeof val === 'undefined' ? val : err('undefined');