<T>(
checks_0: SchemaAST.Check<T>,
...checks: Array<SchemaAST.Check<T>>
): Prism<T, T>Creates a Prism from one or more Schema validation checks.
When to use
Use when you want to narrow T to the subset that passes certain validation
rules (e.g. positive integer).
- You already have
Schema.isGreaterThan,Schema.isInt, etc.
Details
getResultruns all checks; fails with a combined error message when any check fails.setis identity — the value passes through unchanged.
Example (Creating a positive integer prism)
import { Optic, Result, Schema } from "effect"
const posInt = Optic.fromChecks<number>(
Schema.isGreaterThan(0),
Schema.isInt()
)
console.log(Result.isSuccess(posInt.getResult(3)))
// Output: true
console.log(Result.isFailure(posInt.getResult(-1)))
// Output: trueSource effect/Optic.ts:3163 lines
export function function fromChecks<T>(
checks_0: SchemaAST.Check<T>,
...checks: Array<SchemaAST.Check<T>>
): Prism<T, T>
Creates a
Prism
from one or more Schema validation checks.
When to use
Use when you want to narrow T to the subset that passes certain validation
rules (e.g. positive integer).
- You already have
Schema.isGreaterThan, Schema.isInt, etc.
Details
getResult runs all checks; fails with a combined error message when
any check fails.
set is identity — the value passes through unchanged.
Example (Creating a positive integer prism)
import { Optic, Result, Schema } from "effect"
const posInt = Optic.fromChecks<number>(
Schema.isGreaterThan(0),
Schema.isInt()
)
console.log(Result.isSuccess(posInt.getResult(3)))
// Output: true
console.log(Result.isFailure(posInt.getResult(-1)))
// Output: true
fromChecks<function (type parameter) T in fromChecks<T>(checks_0: SchemaAST.Check<T>, ...checks: SchemaAST.Check<T>[]): Prism<T, T>T>(...checks: readonly [
SchemaAST.Check<T>,
...Array<SchemaAST.Check<T>>
]
(parameter) checks: {
0: SchemaAST.Check<T>;
length: number;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
concat: { (...items: Array<ConcatArray<SchemaAST.Check<T>>>): Array<SchemaAST.Check<T>>; (...items: Array<SchemaAST.Check<T> | ConcatArray<SchemaAST.Check<T>>>): Array<SchemaAST.Check<T>> };
join: (separator?: string) => string;
slice: (start?: number, end?: number) => Array<SchemaAST.Check<T>>;
indexOf: (searchElement: SchemaAST.Check<T>, fromIndex?: number) => number;
lastIndexOf: (searchElement: SchemaAST.Check<T>, fromIndex?: number) => number;
every: { (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => value is S, thisArg?: any): this is readonly S[]; (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.C…;
some: (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => void, thisArg?: any) => void;
map: (callbackfn: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => value is S, thisArg?: any): Array<S>; (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) =>…;
reduce: { (callbackfn: (previousValue: SchemaAST.Check<T>, currentValue: SchemaAST.Check<T>, currentIndex: number, array: ReadonlyArray<SchemaAST.Check<T>>) => SchemaAST.Check<T>): SchemaAST.Check<T>; (callbackfn: (previousValue: SchemaAST.Check<T…;
reduceRight: { (callbackfn: (previousValue: SchemaAST.Check<T>, currentValue: SchemaAST.Check<T>, currentIndex: number, array: ReadonlyArray<SchemaAST.Check<T>>) => SchemaAST.Check<T>): SchemaAST.Check<T>; (callbackfn: (previousValue: SchemaAST.Check<T…;
find: { (predicate: (value: SchemaAST.Check<T>, index: number, obj: ReadonlyArray<SchemaAST.Check<T>>) => value is S, thisArg?: any): S | undefined; (predicate: (value: SchemaAST.Check<T>, index: number, obj: ReadonlyArray<SchemaAST.Check<T>>) =…;
findIndex: (predicate: (value: SchemaAST.Check<T>, index: number, obj: ReadonlyArray<SchemaAST.Check<T>>) => unknown, thisArg?: any) => number;
entries: () => ArrayIterator<[number, SchemaAST.Check<T>]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<SchemaAST.Check<T>>;
includes: (searchElement: SchemaAST.Check<T>, fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: SchemaAST.Check<T>, index: number, array: Array<SchemaAST.Check<T>>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => SchemaAST.Check<T> | undefined;
findLast: { (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => value is S, thisArg?: any): S | undefined; (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>…;
findLastIndex: (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => unknown, thisArg?: any) => number;
toReversed: () => Array<SchemaAST.Check<T>>;
toSorted: (compareFn?: ((a: SchemaAST.Check<T>, b: SchemaAST.Check<T>) => number) | undefined) => Array<SchemaAST.Check<T>>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<SchemaAST.Check<T>>): Array<SchemaAST.Check<T>>; (start: number, deleteCount?: number): Array<SchemaAST.Check<T>> };
with: (index: number, value: SchemaAST.Check<T>) => Array<SchemaAST.Check<T>>;
}
checks: readonly [import SchemaASTSchemaAST.type Check<T> =
| SchemaAST.Filter<T>
| SchemaAST.FilterGroup<T>
Check<function (type parameter) T in fromChecks<T>(checks_0: SchemaAST.Check<T>, ...checks: SchemaAST.Check<T>[]): Prism<T, T>T>, ...interface Array<T>Array<import SchemaASTSchemaAST.type Check<T> =
| SchemaAST.Filter<T>
| SchemaAST.FilterGroup<T>
Check<function (type parameter) T in fromChecks<T>(checks_0: SchemaAST.Check<T>, ...checks: SchemaAST.Check<T>[]): Prism<T, T>T>>]): interface Prism<in out S, in out A>Focuses on a part A of S that may not be present (e.g. a union
variant or a validated subset).
When to use
Use when the focus is conditional — reading can fail (wrong variant, failed
validation).
- Building a new
S from A does not require the original S.
Details
getResult(s) returns Result.Success<A> when the focus matches, or
Result.Failure<string> with an error message.
set(a) always succeeds and returns a new S.
- Extends
Optional
.
- Composing two Prisms produces a Prism; composing a Prism with a
Example (Narrowing a tagged union)
import { Optic, Result } from "effect"
type Shape =
| { readonly _tag: "Circle"; readonly radius: number }
| { readonly _tag: "Rect"; readonly width: number }
const _circle = Optic.id<Shape>().tag("Circle")
console.log(Result.isSuccess(_circle.getResult({ _tag: "Circle", radius: 5 })))
// Output: true
console.log(Result.isFailure(_circle.getResult({ _tag: "Rect", width: 10 })))
// Output: true
Prism<function (type parameter) T in fromChecks<T>(checks_0: SchemaAST.Check<T>, ...checks: SchemaAST.Check<T>[]): Prism<T, T>T, function (type parameter) T in fromChecks<T>(checks_0: SchemaAST.Check<T>, ...checks: SchemaAST.Check<T>[]): Prism<T, T>T> {
return function make(node: Node): anymake(new constructor CheckNode<T>(checks: readonly [SchemaAST.Check<T>, ...SchemaAST.Check<T>[]]): CheckNode<T>CheckNode(checks: readonly [
SchemaAST.Check<T>,
...Array<SchemaAST.Check<T>>
]
(parameter) checks: {
0: SchemaAST.Check<T>;
length: number;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
concat: { (...items: Array<ConcatArray<SchemaAST.Check<T>>>): Array<SchemaAST.Check<T>>; (...items: Array<SchemaAST.Check<T> | ConcatArray<SchemaAST.Check<T>>>): Array<SchemaAST.Check<T>> };
join: (separator?: string) => string;
slice: (start?: number, end?: number) => Array<SchemaAST.Check<T>>;
indexOf: (searchElement: SchemaAST.Check<T>, fromIndex?: number) => number;
lastIndexOf: (searchElement: SchemaAST.Check<T>, fromIndex?: number) => number;
every: { (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => value is S, thisArg?: any): this is readonly S[]; (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.C…;
some: (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => void, thisArg?: any) => void;
map: (callbackfn: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => value is S, thisArg?: any): Array<S>; (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) =>…;
reduce: { (callbackfn: (previousValue: SchemaAST.Check<T>, currentValue: SchemaAST.Check<T>, currentIndex: number, array: ReadonlyArray<SchemaAST.Check<T>>) => SchemaAST.Check<T>): SchemaAST.Check<T>; (callbackfn: (previousValue: SchemaAST.Check<T…;
reduceRight: { (callbackfn: (previousValue: SchemaAST.Check<T>, currentValue: SchemaAST.Check<T>, currentIndex: number, array: ReadonlyArray<SchemaAST.Check<T>>) => SchemaAST.Check<T>): SchemaAST.Check<T>; (callbackfn: (previousValue: SchemaAST.Check<T…;
find: { (predicate: (value: SchemaAST.Check<T>, index: number, obj: ReadonlyArray<SchemaAST.Check<T>>) => value is S, thisArg?: any): S | undefined; (predicate: (value: SchemaAST.Check<T>, index: number, obj: ReadonlyArray<SchemaAST.Check<T>>) =…;
findIndex: (predicate: (value: SchemaAST.Check<T>, index: number, obj: ReadonlyArray<SchemaAST.Check<T>>) => unknown, thisArg?: any) => number;
entries: () => ArrayIterator<[number, SchemaAST.Check<T>]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<SchemaAST.Check<T>>;
includes: (searchElement: SchemaAST.Check<T>, fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: SchemaAST.Check<T>, index: number, array: Array<SchemaAST.Check<T>>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => SchemaAST.Check<T> | undefined;
findLast: { (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => value is S, thisArg?: any): S | undefined; (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>…;
findLastIndex: (predicate: (value: SchemaAST.Check<T>, index: number, array: ReadonlyArray<SchemaAST.Check<T>>) => unknown, thisArg?: any) => number;
toReversed: () => Array<SchemaAST.Check<T>>;
toSorted: (compareFn?: ((a: SchemaAST.Check<T>, b: SchemaAST.Check<T>) => number) | undefined) => Array<SchemaAST.Check<T>>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<SchemaAST.Check<T>>): Array<SchemaAST.Check<T>>; (start: number, deleteCount?: number): Array<SchemaAST.Check<T>> };
with: (index: number, value: SchemaAST.Check<T>) => Array<SchemaAST.Check<T>>;
}
checks))
}