import { isFunction, isMap, isSet, Json, JsonArray, JsonObject, JsonPrimitive } from '@typed/common'
import { Is, IsNot, pipe2 } from '@typed/lambda'
import { all } from './all'
import { complement } from './complement'
import { equals } from './equals'
import { not } from './not'
import { or } from './or'
export { isFunction, isMap, isSet }
export const is = (value: A): Is => equals(value) as any
export const isNot = (a: A): IsNot => pipe2(is(a), not) as any
export const isAndIsNot = (value: A): readonly [Is, IsNot] =>
[is(value), isNot(value)] as const
export const isNotFunction: IsNot = complement(isFunction)
export const isNotMap: IsNot