import { Eq, eqUndefined, eqNull, eqString, eqNumber, eqArray, eqRecord, eqAny, tripleEq } from './Eq';
import { Pprint, pprintUndefined, pprintNull, pprintString, pprintNumber, pprintArray, pprintRecord, pprintAny } from './Pprint';
/** To test a type, you should be able to compare 2 values and print them out. */
export interface Testable extends Eq, Pprint {}
export const testable = (eqA: Eq, pprintA: Pprint) => ({
...eqA,
...pprintA
});
export const tUndefined = testable(eqUndefined, pprintUndefined);
export const tNull = testable(eqNull, pprintNull);
export const tString = testable(eqString, pprintString);
export const tNumber = testable(eqNumber, pprintNumber);
export const tArray = (ta: Testable): Testable> =>
testable(eqArray(ta), pprintArray(ta));
export const tRecord = (ta: Testable): Testable> =>
testable(eqRecord(ta), pprintRecord(ta));
export const tAny = testable(eqAny, pprintAny);
export const tStrict = testable(tripleEq, pprintAny);