type Result = 'OK' | 'Falsified' | 'Exception'; type TestResult = { result: Result, seed: number, counterexample: A | null }; type Predicate = (a: A) => boolean; type Gen = (s: number) => (() => A); type Shrinker = (a: A) => [A]; function property(seed: number, predicate: Predicate, generator: Gen, shrinker: Shrinker): TestResult { return {result: 'OK', seed, counterexample: null}; }