import type { Assert } from './prelude.js' type $ = (a: A) => B type Sequence = { (a: Assert): Assert (a: Assert, b: $): Assert (a: Assert, b: $, c: $): Assert } const sequence: Sequence = (...as: Assert[]) => { if (!as.length) { throw new TypeError('Expected non-zero arity.') } return (value: unknown) => { let r = value for (const a of as) { r = a(r) } return r } } export default sequence