From 203658f8001c132b25764ab70344b171683b554c Mon Sep 17 00:00:00 2001 From: Giulio Canti Date: Sun, 14 Jul 2024 10:56:15 +0200 Subject: [PATCH] add support for `Refinement`s to `Predicate.or`, closes #3243 (#3250) --- .changeset/wet-snakes-mate.md | 12 ++++++++++++ packages/effect/dtslint/Predicate.ts | 18 +++++++++++++++++- packages/effect/src/Predicate.ts | 2 ++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 .changeset/wet-snakes-mate.md diff --git a/.changeset/wet-snakes-mate.md b/.changeset/wet-snakes-mate.md new file mode 100644 index 0000000000..db6c071386 --- /dev/null +++ b/.changeset/wet-snakes-mate.md @@ -0,0 +1,12 @@ +--- +"effect": patch +--- + +add support for `Refinement`s to `Predicate.or`, closes #3243 + +```ts +import { Predicate } from "effect" + +// Refinement +const isStringOrNumber = Predicate.or(Predicate.isString, Predicate.isNumber) +``` diff --git a/packages/effect/dtslint/Predicate.ts b/packages/effect/dtslint/Predicate.ts index 6c59c71147..4d8a9a12c3 100644 --- a/packages/effect/dtslint/Predicate.ts +++ b/packages/effect/dtslint/Predicate.ts @@ -1,4 +1,4 @@ -import { pipe } from "effect/Function" +import { hole, pipe } from "effect/Function" import * as Predicate from "effect/Predicate" declare const u: unknown @@ -255,3 +255,19 @@ pipe(hasa, Predicate.and(hasb)) // $ExpectType Refinement Predicate.and(hasa, hasb) + +// ------------------------------------------------------------------------------------- +// or +// ------------------------------------------------------------------------------------- + +// $ExpectType Predicate +pipe(hole>(), Predicate.or(hole>())) + +// $ExpectType Predicate +Predicate.or(hole>(), hole>()) + +// $ExpectType Refinement +pipe(Predicate.isString, Predicate.or(Predicate.isNumber)) + +// $ExpectType Refinement +Predicate.or(Predicate.isString, Predicate.isNumber) diff --git a/packages/effect/src/Predicate.ts b/packages/effect/src/Predicate.ts index 64fdffb8f1..2d79c29d47 100644 --- a/packages/effect/src/Predicate.ts +++ b/packages/effect/src/Predicate.ts @@ -750,6 +750,8 @@ export const not = (self: Predicate): Predicate => (a) => !self(a) * @since 2.0.0 */ export const or: { + (that: Refinement): (self: Refinement) => Refinement + (self: Refinement, that: Refinement): Refinement (that: Predicate): (self: Predicate) => Predicate (self: Predicate, that: Predicate): Predicate } = dual(2, (self: Predicate, that: Predicate): Predicate => (a) => self(a) || that(a))