import { Equal, Every, Some } from "../helpers"; import { Compose, Fn, PartialApply, unset } from "../core/Core"; export declare namespace Booleans { type ExtendsImpl = [a] extends [b] ? true : false; interface ExtendsFn extends Fn { return: this["args"] extends [infer first, infer second, ...any] ? ExtendsImpl : never; } export type Extends = PartialApply; type NotImpl = a extends true ? false : true; interface NotFn extends Fn { return: this["args"] extends [infer first, ...any] ? NotImpl : never; } export type Not = PartialApply; interface EqualsFn extends Fn { return: this["args"] extends [infer a, infer b, ...any] ? Equal : never; } export type Equals = PartialApply; export type NotEqual = Compose<[ Not, PartialApply ]>; export type DoesNotExtend = Compose<[ Not, PartialApply ]>; interface AndFn extends Fn { return: this["args"] extends [ infer first extends boolean, infer second extends boolean, ...any ] ? Every<[first, second]> : never; } export type And = PartialApply; interface OrFn extends Fn { return: this["args"] extends [ infer first extends boolean, infer second extends boolean, ...any ] ? Some<[first, second]> : never; } export type Or = PartialApply; interface XOrFn extends Fn { return: this["args"] extends [ infer first extends boolean, infer second extends boolean, ...any ] ? first extends second ? false : true : never; } export type XOr = PartialApply; export {}; }