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