effect 2.3.8 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/BigInt.js +14 -1
- package/dist/cjs/BigInt.js.map +1 -1
- package/dist/cjs/Effect.js +48 -61
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/Either.js +35 -6
- package/dist/cjs/Either.js.map +1 -1
- package/dist/cjs/Equal.js +1 -1
- package/dist/cjs/Equal.js.map +1 -1
- package/dist/cjs/Exit.js +1 -1
- package/dist/cjs/Number.js +25 -1
- package/dist/cjs/Number.js.map +1 -1
- package/dist/cjs/Predicate.js +40 -3
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/ReadonlyArray.js +2 -2
- package/dist/cjs/ReadonlyArray.js.map +1 -1
- package/dist/cjs/ReadonlyRecord.js +71 -76
- package/dist/cjs/ReadonlyRecord.js.map +1 -1
- package/dist/cjs/STM.js.map +1 -1
- package/dist/cjs/Schedule.js.map +1 -1
- package/dist/cjs/Sink.js.map +1 -1
- package/dist/cjs/Stream.js +3 -23
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/Struct.js +3 -1
- package/dist/cjs/Struct.js.map +1 -1
- package/dist/cjs/TestAnnotation.js.map +1 -1
- package/dist/cjs/internal/channel/channelExecutor.js +5 -5
- package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
- package/dist/cjs/internal/channel/channelState.js +5 -5
- package/dist/cjs/internal/channel/channelState.js.map +1 -1
- package/dist/cjs/internal/channel.js.map +1 -1
- package/dist/cjs/internal/clock.js +3 -4
- package/dist/cjs/internal/clock.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +6 -23
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/core.js +11 -27
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +4 -5
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/either.js +3 -3
- package/dist/cjs/internal/either.js.map +1 -1
- package/dist/cjs/internal/groupBy.js.map +1 -1
- package/dist/cjs/internal/layer.js +0 -2
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/runtime.js +12 -1
- package/dist/cjs/internal/runtime.js.map +1 -1
- package/dist/cjs/internal/schedule.js +4 -4
- package/dist/cjs/internal/schedule.js.map +1 -1
- package/dist/cjs/internal/sink.js +0 -2
- package/dist/cjs/internal/sink.js.map +1 -1
- package/dist/cjs/internal/stm/stm.js +1 -0
- package/dist/cjs/internal/stm/stm.js.map +1 -1
- package/dist/cjs/internal/stream.js +51 -64
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/BigInt.d.ts +7 -0
- package/dist/dts/BigInt.d.ts.map +1 -1
- package/dist/dts/Brand.d.ts +1 -1
- package/dist/dts/Brand.d.ts.map +1 -1
- package/dist/dts/Cause.d.ts +1 -1
- package/dist/dts/Cause.d.ts.map +1 -1
- package/dist/dts/Channel.d.ts +11 -11
- package/dist/dts/Channel.d.ts.map +1 -1
- package/dist/dts/Chunk.d.ts +3 -3
- package/dist/dts/Config.d.ts +4 -4
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Cron.d.ts +1 -1
- package/dist/dts/Cron.d.ts.map +1 -1
- package/dist/dts/Differ.d.ts +2 -2
- package/dist/dts/Differ.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +84 -108
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/Either.d.ts +126 -83
- package/dist/dts/Either.d.ts.map +1 -1
- package/dist/dts/Encoding.d.ts +6 -6
- package/dist/dts/Encoding.d.ts.map +1 -1
- package/dist/dts/Equal.d.ts.map +1 -1
- package/dist/dts/Exit.d.ts +2 -2
- package/dist/dts/Fiber.d.ts +2 -2
- package/dist/dts/Fiber.d.ts.map +1 -1
- package/dist/dts/GroupBy.d.ts +12 -12
- package/dist/dts/GroupBy.d.ts.map +1 -1
- package/dist/dts/Layer.d.ts +26 -26
- package/dist/dts/Layer.d.ts.map +1 -1
- package/dist/dts/List.d.ts +2 -2
- package/dist/dts/Logger.d.ts +4 -4
- package/dist/dts/Match.d.ts +2 -2
- package/dist/dts/Match.d.ts.map +1 -1
- package/dist/dts/MergeDecision.d.ts +1 -1
- package/dist/dts/MergeState.d.ts +5 -5
- package/dist/dts/MergeState.d.ts.map +1 -1
- package/dist/dts/Metric.d.ts +13 -13
- package/dist/dts/Metric.d.ts.map +1 -1
- package/dist/dts/MetricPolling.d.ts +4 -4
- package/dist/dts/MetricPolling.d.ts.map +1 -1
- package/dist/dts/Number.d.ts +8 -0
- package/dist/dts/Number.d.ts.map +1 -1
- package/dist/dts/Option.d.ts +11 -11
- package/dist/dts/Predicate.d.ts +37 -2
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/ReadonlyArray.d.ts +9 -8
- package/dist/dts/ReadonlyArray.d.ts.map +1 -1
- package/dist/dts/ReadonlyRecord.d.ts +111 -94
- package/dist/dts/ReadonlyRecord.d.ts.map +1 -1
- package/dist/dts/Reloadable.d.ts +4 -4
- package/dist/dts/Reloadable.d.ts.map +1 -1
- package/dist/dts/RequestResolver.d.ts +13 -13
- package/dist/dts/RequestResolver.d.ts.map +1 -1
- package/dist/dts/Resource.d.ts +1 -1
- package/dist/dts/Resource.d.ts.map +1 -1
- package/dist/dts/STM.d.ts +144 -139
- package/dist/dts/STM.d.ts.map +1 -1
- package/dist/dts/Schedule.d.ts +171 -179
- package/dist/dts/Schedule.d.ts.map +1 -1
- package/dist/dts/SingleProducerAsyncInput.d.ts +1 -1
- package/dist/dts/SingleProducerAsyncInput.d.ts.map +1 -1
- package/dist/dts/Sink.d.ts +13 -13
- package/dist/dts/Sink.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +355 -366
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/Struct.d.ts +3 -3
- package/dist/dts/Struct.d.ts.map +1 -1
- package/dist/dts/SubscriptionRef.d.ts +2 -2
- package/dist/dts/TArray.d.ts +2 -2
- package/dist/dts/TDeferred.d.ts +3 -3
- package/dist/dts/TMap.d.ts +10 -10
- package/dist/dts/TSet.d.ts +4 -4
- package/dist/dts/Take.d.ts +2 -2
- package/dist/dts/TestAnnotation.d.ts +2 -2
- package/dist/dts/TestAnnotation.d.ts.map +1 -1
- package/dist/dts/Types.d.ts +7 -0
- package/dist/dts/Types.d.ts.map +1 -1
- package/dist/dts/internal/stm/stm.d.ts +2 -15
- package/dist/dts/internal/stm/stm.d.ts.map +1 -1
- package/dist/esm/BigInt.js +12 -0
- package/dist/esm/BigInt.js.map +1 -1
- package/dist/esm/Effect.js +45 -58
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/Either.js +42 -5
- package/dist/esm/Either.js.map +1 -1
- package/dist/esm/Equal.js +1 -1
- package/dist/esm/Equal.js.map +1 -1
- package/dist/esm/Exit.js +1 -1
- package/dist/esm/Number.js +23 -0
- package/dist/esm/Number.js.map +1 -1
- package/dist/esm/Predicate.js +37 -2
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/ReadonlyArray.js +2 -2
- package/dist/esm/ReadonlyArray.js.map +1 -1
- package/dist/esm/ReadonlyRecord.js +70 -75
- package/dist/esm/ReadonlyRecord.js.map +1 -1
- package/dist/esm/STM.js.map +1 -1
- package/dist/esm/Schedule.js.map +1 -1
- package/dist/esm/Sink.js.map +1 -1
- package/dist/esm/Stream.js +5 -22
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/Struct.js +3 -1
- package/dist/esm/Struct.js.map +1 -1
- package/dist/esm/TestAnnotation.js.map +1 -1
- package/dist/esm/internal/channel/channelExecutor.js +5 -5
- package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
- package/dist/esm/internal/channel/channelState.js +3 -3
- package/dist/esm/internal/channel/channelState.js.map +1 -1
- package/dist/esm/internal/channel.js.map +1 -1
- package/dist/esm/internal/clock.js +3 -4
- package/dist/esm/internal/clock.js.map +1 -1
- package/dist/esm/internal/core-effect.js +4 -20
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/core.js +8 -22
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +4 -5
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/either.js +3 -3
- package/dist/esm/internal/either.js.map +1 -1
- package/dist/esm/internal/groupBy.js.map +1 -1
- package/dist/esm/internal/layer.js +0 -2
- package/dist/esm/internal/layer.js.map +1 -1
- package/dist/esm/internal/runtime.js +12 -1
- package/dist/esm/internal/runtime.js.map +1 -1
- package/dist/esm/internal/schedule.js +4 -4
- package/dist/esm/internal/schedule.js.map +1 -1
- package/dist/esm/internal/sink.js +0 -2
- package/dist/esm/internal/sink.js.map +1 -1
- package/dist/esm/internal/stm/stm.js +1 -0
- package/dist/esm/internal/stm/stm.js.map +1 -1
- package/dist/esm/internal/stream.js +49 -59
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/BigInt.ts +13 -0
- package/src/Brand.ts +4 -4
- package/src/Cause.ts +1 -1
- package/src/Channel.ts +17 -17
- package/src/Chunk.ts +4 -4
- package/src/Config.ts +4 -4
- package/src/Cron.ts +2 -2
- package/src/Differ.ts +2 -2
- package/src/Effect.ts +100 -145
- package/src/Either.ts +215 -133
- package/src/Encoding.ts +3 -3
- package/src/Equal.ts +1 -1
- package/src/Exit.ts +2 -2
- package/src/Fiber.ts +2 -2
- package/src/GroupBy.ts +16 -16
- package/src/Layer.ts +32 -32
- package/src/List.ts +3 -3
- package/src/Logger.ts +4 -4
- package/src/Match.ts +3 -3
- package/src/MergeDecision.ts +1 -1
- package/src/MergeState.ts +8 -8
- package/src/Metric.ts +13 -13
- package/src/MetricPolling.ts +9 -9
- package/src/Number.ts +26 -0
- package/src/Option.ts +17 -17
- package/src/Predicate.ts +39 -2
- package/src/ReadonlyArray.ts +23 -15
- package/src/ReadonlyRecord.ts +421 -265
- package/src/Reloadable.ts +4 -4
- package/src/RequestResolver.ts +19 -19
- package/src/Resource.ts +3 -3
- package/src/STM.ts +166 -213
- package/src/Schedule.ts +331 -361
- package/src/SingleProducerAsyncInput.ts +1 -1
- package/src/Sink.ts +19 -19
- package/src/Stream.ts +449 -456
- package/src/Struct.ts +8 -5
- package/src/SubscriptionRef.ts +2 -2
- package/src/TArray.ts +2 -2
- package/src/TDeferred.ts +4 -4
- package/src/TMap.ts +10 -10
- package/src/TSet.ts +4 -4
- package/src/Take.ts +4 -4
- package/src/TestAnnotation.ts +5 -8
- package/src/Types.ts +11 -0
- package/src/internal/blockedRequests.ts +2 -2
- package/src/internal/cause.ts +2 -2
- package/src/internal/channel/channelExecutor.ts +26 -26
- package/src/internal/channel/channelState.ts +13 -13
- package/src/internal/channel/mergeDecision.ts +1 -1
- package/src/internal/channel/mergeState.ts +6 -6
- package/src/internal/channel/singleProducerAsyncInput.ts +5 -5
- package/src/internal/channel.ts +43 -43
- package/src/internal/clock.ts +3 -4
- package/src/internal/config.ts +7 -7
- package/src/internal/configError.ts +1 -1
- package/src/internal/configProvider/pathPatch.ts +2 -2
- package/src/internal/configProvider.ts +1 -1
- package/src/internal/core-effect.ts +28 -43
- package/src/internal/core.ts +15 -40
- package/src/internal/dataSource.ts +26 -26
- package/src/internal/differ/orPatch.ts +7 -7
- package/src/internal/differ.ts +2 -2
- package/src/internal/effect/circular.ts +9 -10
- package/src/internal/either.ts +25 -22
- package/src/internal/encoding/base64.ts +1 -1
- package/src/internal/encoding/base64Url.ts +1 -1
- package/src/internal/encoding/hex.ts +1 -1
- package/src/internal/fiber.ts +2 -2
- package/src/internal/fiberRuntime.ts +9 -9
- package/src/internal/groupBy.ts +40 -40
- package/src/internal/layer/circular.ts +4 -4
- package/src/internal/layer.ts +52 -54
- package/src/internal/matcher.ts +5 -5
- package/src/internal/metric/polling.ts +8 -8
- package/src/internal/metric.ts +6 -6
- package/src/internal/reloadable.ts +4 -4
- package/src/internal/resource.ts +2 -2
- package/src/internal/runtime.ts +32 -19
- package/src/internal/schedule.ts +430 -500
- package/src/internal/sink.ts +27 -29
- package/src/internal/stm/core.ts +23 -23
- package/src/internal/stm/stm.ts +158 -157
- package/src/internal/stm/tArray.ts +3 -3
- package/src/internal/stm/tDeferred.ts +5 -5
- package/src/internal/stm/tMap.ts +13 -13
- package/src/internal/stm/tSet.ts +4 -4
- package/src/internal/stream.ts +688 -723
- package/src/internal/subscriptionRef.ts +3 -3
- package/src/internal/take.ts +6 -6
- package/src/internal/version.ts +1 -1
package/src/Either.ts
CHANGED
|
@@ -12,7 +12,7 @@ import type { Option } from "./Option.js"
|
|
|
12
12
|
import type { Pipeable } from "./Pipeable.js"
|
|
13
13
|
import type { Predicate, Refinement } from "./Predicate.js"
|
|
14
14
|
import { isFunction } from "./Predicate.js"
|
|
15
|
-
import type { Covariant, NoInfer } from "./Types.js"
|
|
15
|
+
import type { Covariant, MergeRecord, NoInfer } from "./Types.js"
|
|
16
16
|
import type * as Unify from "./Unify.js"
|
|
17
17
|
import * as Gen from "./Utils.js"
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@ import * as Gen from "./Utils.js"
|
|
|
20
20
|
* @category models
|
|
21
21
|
* @since 2.0.0
|
|
22
22
|
*/
|
|
23
|
-
export type Either<
|
|
23
|
+
export type Either<R, L = never> = Left<L, R> | Right<L, R>
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* @category symbols
|
|
@@ -38,13 +38,13 @@ export type TypeId = typeof TypeId
|
|
|
38
38
|
* @category models
|
|
39
39
|
* @since 2.0.0
|
|
40
40
|
*/
|
|
41
|
-
export interface Left<out
|
|
41
|
+
export interface Left<out L, out R> extends Pipeable, Inspectable {
|
|
42
42
|
readonly _tag: "Left"
|
|
43
43
|
readonly _op: "Left"
|
|
44
|
-
readonly left:
|
|
44
|
+
readonly left: L
|
|
45
45
|
readonly [TypeId]: {
|
|
46
|
-
readonly
|
|
47
|
-
readonly
|
|
46
|
+
readonly _R: Covariant<R>
|
|
47
|
+
readonly _L: Covariant<L>
|
|
48
48
|
}
|
|
49
49
|
[Unify.typeSymbol]?: unknown
|
|
50
50
|
[Unify.unifySymbol]?: EitherUnify<this>
|
|
@@ -55,13 +55,13 @@ export interface Left<out E, out A> extends Pipeable, Inspectable {
|
|
|
55
55
|
* @category models
|
|
56
56
|
* @since 2.0.0
|
|
57
57
|
*/
|
|
58
|
-
export interface Right<out
|
|
58
|
+
export interface Right<out L, out R> extends Pipeable, Inspectable {
|
|
59
59
|
readonly _tag: "Right"
|
|
60
60
|
readonly _op: "Right"
|
|
61
|
-
readonly right:
|
|
61
|
+
readonly right: R
|
|
62
62
|
readonly [TypeId]: {
|
|
63
|
-
readonly
|
|
64
|
-
readonly
|
|
63
|
+
readonly _R: Covariant<R>
|
|
64
|
+
readonly _L: Covariant<L>
|
|
65
65
|
}
|
|
66
66
|
[Unify.typeSymbol]?: unknown
|
|
67
67
|
[Unify.unifySymbol]?: EitherUnify<this>
|
|
@@ -73,7 +73,7 @@ export interface Right<out E, out A> extends Pipeable, Inspectable {
|
|
|
73
73
|
* @since 2.0.0
|
|
74
74
|
*/
|
|
75
75
|
export interface EitherUnify<A extends { [Unify.typeSymbol]?: any }> {
|
|
76
|
-
Either?: () => A[Unify.typeSymbol] extends Either<infer
|
|
76
|
+
Either?: () => A[Unify.typeSymbol] extends Either<infer R0, infer L0> | infer _ ? Either<R0, L0> : never
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
/**
|
|
@@ -87,7 +87,7 @@ export interface EitherUnifyIgnore {}
|
|
|
87
87
|
* @since 2.0.0
|
|
88
88
|
*/
|
|
89
89
|
export interface EitherTypeLambda extends TypeLambda {
|
|
90
|
-
readonly type: Either<this["
|
|
90
|
+
readonly type: Either<this["Target"], this["Out1"]>
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
/**
|
|
@@ -97,7 +97,7 @@ export interface EitherTypeLambda extends TypeLambda {
|
|
|
97
97
|
* @category constructors
|
|
98
98
|
* @since 2.0.0
|
|
99
99
|
*/
|
|
100
|
-
export const right: <
|
|
100
|
+
export const right: <R>(right: R) => Either<R> = either.right
|
|
101
101
|
|
|
102
102
|
/**
|
|
103
103
|
* Constructs a new `Either` holding a `Left` value. This usually represents a failure, due to the right-bias of this
|
|
@@ -106,7 +106,7 @@ export const right: <A>(a: A) => Either<never, A> = either.right
|
|
|
106
106
|
* @category constructors
|
|
107
107
|
* @since 2.0.0
|
|
108
108
|
*/
|
|
109
|
-
export const left: <
|
|
109
|
+
export const left: <L>(left: L) => Either<never, L> = either.left
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
112
|
* Takes a lazy default and a nullable value, if the value is not nully (`null` or `undefined`), turn it into a `Right`, if the value is nully use
|
|
@@ -122,12 +122,12 @@ export const left: <E>(e: E) => Either<E, never> = either.left
|
|
|
122
122
|
* @since 2.0.0
|
|
123
123
|
*/
|
|
124
124
|
export const fromNullable: {
|
|
125
|
-
<
|
|
126
|
-
<
|
|
125
|
+
<R, L>(onNullable: (right: R) => L): (self: R) => Either<NonNullable<R>, L>
|
|
126
|
+
<R, L>(self: R, onNullable: (right: R) => L): Either<NonNullable<R>, L>
|
|
127
127
|
} = dual(
|
|
128
128
|
2,
|
|
129
|
-
<
|
|
130
|
-
self == null ? left(onNullable(self)) : right(self as NonNullable<
|
|
129
|
+
<R, L>(self: R, onNullable: (right: R) => L): Either<NonNullable<R>, L> =>
|
|
130
|
+
self == null ? left(onNullable(self)) : right(self as NonNullable<R>)
|
|
131
131
|
)
|
|
132
132
|
|
|
133
133
|
/**
|
|
@@ -142,22 +142,22 @@ export const fromNullable: {
|
|
|
142
142
|
* @since 2.0.0
|
|
143
143
|
*/
|
|
144
144
|
export const fromOption: {
|
|
145
|
-
<
|
|
146
|
-
<
|
|
145
|
+
<L>(onNone: () => L): <R>(self: Option<R>) => Either<R, L>
|
|
146
|
+
<R, L>(self: Option<R>, onNone: () => L): Either<R, L>
|
|
147
147
|
} = either.fromOption
|
|
148
148
|
|
|
149
149
|
const try_: {
|
|
150
|
-
<
|
|
150
|
+
<R, L>(
|
|
151
151
|
options: {
|
|
152
|
-
readonly try: LazyArg<
|
|
153
|
-
readonly catch: (error: unknown) =>
|
|
152
|
+
readonly try: LazyArg<R>
|
|
153
|
+
readonly catch: (error: unknown) => L
|
|
154
154
|
}
|
|
155
|
-
): Either<
|
|
156
|
-
<
|
|
157
|
-
} = (<
|
|
158
|
-
evaluate: LazyArg<
|
|
159
|
-
readonly try: LazyArg<
|
|
160
|
-
readonly catch: (error: unknown) =>
|
|
155
|
+
): Either<R, L>
|
|
156
|
+
<R>(evaluate: LazyArg<R>): Either<R, unknown>
|
|
157
|
+
} = (<R, L>(
|
|
158
|
+
evaluate: LazyArg<R> | {
|
|
159
|
+
readonly try: LazyArg<R>
|
|
160
|
+
readonly catch: (error: unknown) => L
|
|
161
161
|
}
|
|
162
162
|
) => {
|
|
163
163
|
if (isFunction(evaluate)) {
|
|
@@ -217,7 +217,7 @@ export const isEither: (input: unknown) => input is Either<unknown, unknown> = e
|
|
|
217
217
|
* @category guards
|
|
218
218
|
* @since 2.0.0
|
|
219
219
|
*/
|
|
220
|
-
export const isLeft: <
|
|
220
|
+
export const isLeft: <R, L>(self: Either<R, L>) => self is Left<L, R> = either.isLeft
|
|
221
221
|
|
|
222
222
|
/**
|
|
223
223
|
* Determine if a `Either` is a `Right`.
|
|
@@ -233,7 +233,7 @@ export const isLeft: <E, A>(self: Either<E, A>) => self is Left<E, A> = either.i
|
|
|
233
233
|
* @category guards
|
|
234
234
|
* @since 2.0.0
|
|
235
235
|
*/
|
|
236
|
-
export const isRight: <
|
|
236
|
+
export const isRight: <R, L>(self: Either<R, L>) => self is Right<L, R> = either.isRight
|
|
237
237
|
|
|
238
238
|
/**
|
|
239
239
|
* Converts a `Either` to an `Option` discarding the `Left`.
|
|
@@ -250,7 +250,7 @@ export const isRight: <E, A>(self: Either<E, A>) => self is Right<E, A> = either
|
|
|
250
250
|
* @category getters
|
|
251
251
|
* @since 2.0.0
|
|
252
252
|
*/
|
|
253
|
-
export const getRight: <
|
|
253
|
+
export const getRight: <R, L>(self: Either<R, L>) => Option<R> = either.getRight
|
|
254
254
|
|
|
255
255
|
/**
|
|
256
256
|
* Converts a `Either` to an `Option` discarding the value.
|
|
@@ -265,21 +265,21 @@ export const getRight: <E, A>(self: Either<E, A>) => Option<A> = either.getRight
|
|
|
265
265
|
* @category getters
|
|
266
266
|
* @since 2.0.0
|
|
267
267
|
*/
|
|
268
|
-
export const getLeft: <
|
|
268
|
+
export const getLeft: <R, L>(self: Either<R, L>) => Option<L> = either.getLeft
|
|
269
269
|
|
|
270
270
|
/**
|
|
271
271
|
* @category equivalence
|
|
272
272
|
* @since 2.0.0
|
|
273
273
|
*/
|
|
274
|
-
export const getEquivalence = <
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
): Equivalence.Equivalence<Either<
|
|
274
|
+
export const getEquivalence = <R, L>(
|
|
275
|
+
EquivalenceL: Equivalence.Equivalence<L>,
|
|
276
|
+
EquivalenceR: Equivalence.Equivalence<R>
|
|
277
|
+
): Equivalence.Equivalence<Either<R, L>> =>
|
|
278
278
|
Equivalence.make((x, y) =>
|
|
279
279
|
x === y ||
|
|
280
280
|
(isLeft(x) ?
|
|
281
|
-
isLeft(y) &&
|
|
282
|
-
isRight(y) &&
|
|
281
|
+
isLeft(y) && EquivalenceL(x.left, y.left) :
|
|
282
|
+
isRight(y) && EquivalenceR(x.right, y.right))
|
|
283
283
|
)
|
|
284
284
|
|
|
285
285
|
/**
|
|
@@ -287,20 +287,20 @@ export const getEquivalence = <E, A>(
|
|
|
287
287
|
* @since 2.0.0
|
|
288
288
|
*/
|
|
289
289
|
export const mapBoth: {
|
|
290
|
-
<
|
|
291
|
-
readonly onLeft: (
|
|
292
|
-
readonly onRight: (
|
|
293
|
-
}): (self: Either<
|
|
294
|
-
<
|
|
295
|
-
readonly onLeft: (
|
|
296
|
-
readonly onRight: (
|
|
297
|
-
}): Either<
|
|
290
|
+
<L, L2, R, R2>(options: {
|
|
291
|
+
readonly onLeft: (left: L) => L2
|
|
292
|
+
readonly onRight: (right: R) => R2
|
|
293
|
+
}): (self: Either<R, L>) => Either<R2, L2>
|
|
294
|
+
<L, R, L2, R2>(self: Either<R, L>, options: {
|
|
295
|
+
readonly onLeft: (left: L) => L2
|
|
296
|
+
readonly onRight: (right: R) => R2
|
|
297
|
+
}): Either<R2, L2>
|
|
298
298
|
} = dual(
|
|
299
299
|
2,
|
|
300
|
-
<
|
|
301
|
-
readonly onLeft: (
|
|
302
|
-
readonly onRight: (
|
|
303
|
-
}): Either<
|
|
300
|
+
<L, R, L2, R2>(self: Either<R, L>, { onLeft, onRight }: {
|
|
301
|
+
readonly onLeft: (left: L) => L2
|
|
302
|
+
readonly onRight: (right: R) => R2
|
|
303
|
+
}): Either<R2, L2> => isLeft(self) ? left(onLeft(self.left)) : right(onRight(self.right))
|
|
304
304
|
)
|
|
305
305
|
|
|
306
306
|
/**
|
|
@@ -313,11 +313,12 @@ export const mapBoth: {
|
|
|
313
313
|
* @since 2.0.0
|
|
314
314
|
*/
|
|
315
315
|
export const mapLeft: {
|
|
316
|
-
<
|
|
317
|
-
<
|
|
316
|
+
<L, L2>(f: (left: L) => L2): <R>(self: Either<R, L>) => Either<R, L2>
|
|
317
|
+
<R, L, L2>(self: Either<R, L>, f: (left: L) => L2): Either<R, L2>
|
|
318
318
|
} = dual(
|
|
319
319
|
2,
|
|
320
|
-
<
|
|
320
|
+
<R, L1, L2>(self: Either<R, L1>, f: (left: L1) => L2): Either<R, L2> =>
|
|
321
|
+
isLeft(self) ? left(f(self.left)) : right(self.right)
|
|
321
322
|
)
|
|
322
323
|
|
|
323
324
|
/**
|
|
@@ -330,11 +331,12 @@ export const mapLeft: {
|
|
|
330
331
|
* @since 2.0.0
|
|
331
332
|
*/
|
|
332
333
|
export const map: {
|
|
333
|
-
<
|
|
334
|
-
<
|
|
334
|
+
<R, R2>(f: (right: R) => R2): <L>(self: Either<R, L>) => Either<R2, L>
|
|
335
|
+
<R, L, R2>(self: Either<R, L>, f: (right: R) => R2): Either<R2, L>
|
|
335
336
|
} = dual(
|
|
336
337
|
2,
|
|
337
|
-
<
|
|
338
|
+
<R1, L, R2>(self: Either<R1, L>, f: (right: R1) => R2): Either<R2, L> =>
|
|
339
|
+
isRight(self) ? right(f(self.right)) : left(self.left)
|
|
338
340
|
)
|
|
339
341
|
|
|
340
342
|
/**
|
|
@@ -359,19 +361,19 @@ export const map: {
|
|
|
359
361
|
* @since 2.0.0
|
|
360
362
|
*/
|
|
361
363
|
export const match: {
|
|
362
|
-
<
|
|
363
|
-
readonly onLeft: (
|
|
364
|
-
readonly onRight: (
|
|
365
|
-
}): (self: Either<
|
|
366
|
-
<
|
|
367
|
-
readonly onLeft: (
|
|
368
|
-
readonly onRight: (
|
|
364
|
+
<L, B, R, C = B>(options: {
|
|
365
|
+
readonly onLeft: (left: L) => B
|
|
366
|
+
readonly onRight: (right: R) => C
|
|
367
|
+
}): (self: Either<R, L>) => B | C
|
|
368
|
+
<R, L, B, C = B>(self: Either<R, L>, options: {
|
|
369
|
+
readonly onLeft: (left: L) => B
|
|
370
|
+
readonly onRight: (right: R) => C
|
|
369
371
|
}): B | C
|
|
370
372
|
} = dual(
|
|
371
373
|
2,
|
|
372
|
-
<
|
|
373
|
-
readonly onLeft: (
|
|
374
|
-
readonly onRight: (
|
|
374
|
+
<R, L, B, C = B>(self: Either<R, L>, { onLeft, onRight }: {
|
|
375
|
+
readonly onLeft: (left: L) => B
|
|
376
|
+
readonly onRight: (right: R) => C
|
|
375
377
|
}): B | C => isLeft(self) ? onLeft(self.left) : onRight(self.right)
|
|
376
378
|
)
|
|
377
379
|
|
|
@@ -404,31 +406,31 @@ export const match: {
|
|
|
404
406
|
* @category filtering & conditionals
|
|
405
407
|
*/
|
|
406
408
|
export const filterOrLeft: {
|
|
407
|
-
<
|
|
408
|
-
refinement: Refinement<NoInfer<
|
|
409
|
-
orLeftWith: (
|
|
410
|
-
): <
|
|
411
|
-
<
|
|
412
|
-
predicate: Predicate<NoInfer<
|
|
413
|
-
orLeftWith: (
|
|
414
|
-
): <
|
|
415
|
-
<
|
|
416
|
-
self: Either<
|
|
417
|
-
refinement: Refinement<
|
|
418
|
-
orLeftWith: (
|
|
419
|
-
): Either<
|
|
420
|
-
<
|
|
421
|
-
} = dual(3, <
|
|
422
|
-
self: Either<
|
|
423
|
-
predicate: Predicate<
|
|
424
|
-
orLeftWith: (
|
|
425
|
-
): Either<
|
|
409
|
+
<R, B extends R, L2>(
|
|
410
|
+
refinement: Refinement<NoInfer<R>, B>,
|
|
411
|
+
orLeftWith: (right: NoInfer<R>) => L2
|
|
412
|
+
): <L>(self: Either<R, L>) => Either<B, L2 | L>
|
|
413
|
+
<R, L2>(
|
|
414
|
+
predicate: Predicate<NoInfer<R>>,
|
|
415
|
+
orLeftWith: (right: NoInfer<R>) => L2
|
|
416
|
+
): <L>(self: Either<R, L>) => Either<R, L2 | L>
|
|
417
|
+
<R, L, B extends R, L2>(
|
|
418
|
+
self: Either<R, L>,
|
|
419
|
+
refinement: Refinement<R, B>,
|
|
420
|
+
orLeftWith: (right: R) => L2
|
|
421
|
+
): Either<B, L | L2>
|
|
422
|
+
<R, L, E2>(self: Either<R, L>, predicate: Predicate<R>, orLeftWith: (right: R) => E2): Either<R, L | E2>
|
|
423
|
+
} = dual(3, <R, L, E2>(
|
|
424
|
+
self: Either<R, L>,
|
|
425
|
+
predicate: Predicate<R>,
|
|
426
|
+
orLeftWith: (right: R) => E2
|
|
427
|
+
): Either<R, L | E2> => flatMap(self, (r) => predicate(r) ? right(r) : left(orLeftWith(r))))
|
|
426
428
|
|
|
427
429
|
/**
|
|
428
430
|
* @category getters
|
|
429
431
|
* @since 2.0.0
|
|
430
432
|
*/
|
|
431
|
-
export const merge: <
|
|
433
|
+
export const merge: <R, L>(self: Either<R, L>) => L | R = match({
|
|
432
434
|
onLeft: identity,
|
|
433
435
|
onRight: identity
|
|
434
436
|
})
|
|
@@ -446,11 +448,11 @@ export const merge: <E, A>(self: Either<E, A>) => E | A = match({
|
|
|
446
448
|
* @since 2.0.0
|
|
447
449
|
*/
|
|
448
450
|
export const getOrElse: {
|
|
449
|
-
<
|
|
450
|
-
<
|
|
451
|
+
<L, R2>(onLeft: (left: L) => R2): <R>(self: Either<R, L>) => R2 | R
|
|
452
|
+
<R, L, R2>(self: Either<R, L>, onLeft: (left: L) => R2): R | R2
|
|
451
453
|
} = dual(
|
|
452
454
|
2,
|
|
453
|
-
<
|
|
455
|
+
<R, L, B>(self: Either<R, L>, onLeft: (left: L) => B): R | B => isLeft(self) ? onLeft(self.left) : self.right
|
|
454
456
|
)
|
|
455
457
|
|
|
456
458
|
/**
|
|
@@ -463,7 +465,7 @@ export const getOrElse: {
|
|
|
463
465
|
* @category getters
|
|
464
466
|
* @since 2.0.0
|
|
465
467
|
*/
|
|
466
|
-
export const getOrNull: <
|
|
468
|
+
export const getOrNull: <R, L>(self: Either<R, L>) => R | null = getOrElse(constNull)
|
|
467
469
|
|
|
468
470
|
/**
|
|
469
471
|
* @example
|
|
@@ -475,7 +477,7 @@ export const getOrNull: <E, A>(self: Either<E, A>) => A | null = getOrElse(const
|
|
|
475
477
|
* @category getters
|
|
476
478
|
* @since 2.0.0
|
|
477
479
|
*/
|
|
478
|
-
export const getOrUndefined: <
|
|
480
|
+
export const getOrUndefined: <R, L>(self: Either<R, L>) => R | undefined = getOrElse(constUndefined)
|
|
479
481
|
|
|
480
482
|
/**
|
|
481
483
|
* Extracts the value of an `Either` or throws if the `Either` is `Left`.
|
|
@@ -498,9 +500,9 @@ export const getOrUndefined: <E, A>(self: Either<E, A>) => A | undefined = getOr
|
|
|
498
500
|
* @since 2.0.0
|
|
499
501
|
*/
|
|
500
502
|
export const getOrThrowWith: {
|
|
501
|
-
<
|
|
502
|
-
<
|
|
503
|
-
} = dual(2, <
|
|
503
|
+
<L>(onLeft: (left: L) => unknown): <A>(self: Either<A, L>) => A
|
|
504
|
+
<R, L>(self: Either<R, L>, onLeft: (left: L) => unknown): R
|
|
505
|
+
} = dual(2, <R, L>(self: Either<R, L>, onLeft: (left: L) => unknown): R => {
|
|
504
506
|
if (isRight(self)) {
|
|
505
507
|
return self.right
|
|
506
508
|
}
|
|
@@ -524,7 +526,7 @@ export const getOrThrowWith: {
|
|
|
524
526
|
* @category getters
|
|
525
527
|
* @since 2.0.0
|
|
526
528
|
*/
|
|
527
|
-
export const getOrThrow: <
|
|
529
|
+
export const getOrThrow: <R, L>(self: Either<R, L>) => R = getOrThrowWith(() =>
|
|
528
530
|
new Error("getOrThrow called on a Left")
|
|
529
531
|
)
|
|
530
532
|
|
|
@@ -538,11 +540,11 @@ export const getOrThrow: <E, A>(self: Either<E, A>) => A = getOrThrowWith(() =>
|
|
|
538
540
|
* @since 2.0.0
|
|
539
541
|
*/
|
|
540
542
|
export const orElse: {
|
|
541
|
-
<
|
|
542
|
-
<
|
|
543
|
+
<L, R2, L2>(that: (left: L) => Either<R2, L2>): <R>(self: Either<R, L>) => Either<R | R2, L2>
|
|
544
|
+
<R, L, R2, L2>(self: Either<R, L>, that: (left: L) => Either<R2, L2>): Either<R | R2, L2>
|
|
543
545
|
} = dual(
|
|
544
546
|
2,
|
|
545
|
-
<
|
|
547
|
+
<R1, L1, R2, L2>(self: Either<R1, L1>, that: (left: L1) => Either<R2, L2>): Either<R1 | R2, L2> =>
|
|
546
548
|
isLeft(self) ? that(self.left) : right(self.right)
|
|
547
549
|
)
|
|
548
550
|
|
|
@@ -551,11 +553,11 @@ export const orElse: {
|
|
|
551
553
|
* @since 2.0.0
|
|
552
554
|
*/
|
|
553
555
|
export const flatMap: {
|
|
554
|
-
<
|
|
555
|
-
<
|
|
556
|
+
<R, R2, L2>(f: (right: R) => Either<R2, L2>): <L>(self: Either<R, L>) => Either<R2, L | L2>
|
|
557
|
+
<R, L, R2, L2>(self: Either<R, L>, f: (right: R) => Either<R2, L2>): Either<R2, L | L2>
|
|
556
558
|
} = dual(
|
|
557
559
|
2,
|
|
558
|
-
<
|
|
560
|
+
<R1, L1, R2, L2>(self: Either<R1, L1>, f: (right: R1) => Either<R2, L2>): Either<R2, L1 | L2> =>
|
|
559
561
|
isLeft(self) ? left(self.left) : f(self.right)
|
|
560
562
|
)
|
|
561
563
|
|
|
@@ -566,17 +568,17 @@ export const flatMap: {
|
|
|
566
568
|
* @since 2.0.0
|
|
567
569
|
*/
|
|
568
570
|
export const andThen: {
|
|
569
|
-
<
|
|
570
|
-
<
|
|
571
|
-
<
|
|
572
|
-
<
|
|
573
|
-
<
|
|
574
|
-
<
|
|
575
|
-
<
|
|
576
|
-
<
|
|
571
|
+
<R, R2, L2>(f: (right: R) => Either<R2, L2>): <L>(self: Either<R, L>) => Either<R2, L | L2>
|
|
572
|
+
<R2, L2>(f: Either<R2, L2>): <L, R1>(self: Either<R1, L>) => Either<R2, L | L2>
|
|
573
|
+
<R, R2>(f: (right: R) => R2): <L>(self: Either<R, L>) => Either<R2, L>
|
|
574
|
+
<R2>(right: R2): <R1, L>(self: Either<R1, L>) => Either<R2, L>
|
|
575
|
+
<R, L, R2, L2>(self: Either<R, L>, f: (right: R) => Either<R2, L2>): Either<R2, L | L2>
|
|
576
|
+
<R, L, R2, L2>(self: Either<R, L>, f: Either<R2, L2>): Either<R2, L | L2>
|
|
577
|
+
<R, L, R2>(self: Either<R, L>, f: (right: R) => R2): Either<R2, L>
|
|
578
|
+
<R, L, R2>(self: Either<R, L>, f: R2): Either<R2, L>
|
|
577
579
|
} = dual(
|
|
578
580
|
2,
|
|
579
|
-
<
|
|
581
|
+
<R, L, R2, L2>(self: Either<R, L>, f: (right: R) => Either<R2, L2> | Either<R2, L2>): Either<R2, L | L2> =>
|
|
580
582
|
flatMap(self, (a) => {
|
|
581
583
|
const b = isFunction(f) ? f(a) : f
|
|
582
584
|
return isEither(b) ? b : right(b)
|
|
@@ -588,19 +590,19 @@ export const andThen: {
|
|
|
588
590
|
* @since 2.0.0
|
|
589
591
|
*/
|
|
590
592
|
export const zipWith: {
|
|
591
|
-
<
|
|
592
|
-
that: Either<
|
|
593
|
-
f: (
|
|
594
|
-
): <
|
|
595
|
-
<
|
|
596
|
-
self: Either<
|
|
597
|
-
that: Either<
|
|
598
|
-
f: (
|
|
599
|
-
): Either<
|
|
593
|
+
<R2, L2, R, B>(
|
|
594
|
+
that: Either<R2, L2>,
|
|
595
|
+
f: (right: R, right2: R2) => B
|
|
596
|
+
): <L>(self: Either<R, L>) => Either<B, L2 | L>
|
|
597
|
+
<R, L, R2, L2, B>(
|
|
598
|
+
self: Either<R, L>,
|
|
599
|
+
that: Either<R2, L2>,
|
|
600
|
+
f: (right: R, right2: R2) => B
|
|
601
|
+
): Either<B, L | L2>
|
|
600
602
|
} = dual(
|
|
601
603
|
3,
|
|
602
|
-
<
|
|
603
|
-
flatMap(self, (
|
|
604
|
+
<R, L, R2, L2, B>(self: Either<R, L>, that: Either<R2, L2>, f: (right: R, right2: R2) => B): Either<B, L | L2> =>
|
|
605
|
+
flatMap(self, (r) => map(that, (r2) => f(r, r2)))
|
|
604
606
|
)
|
|
605
607
|
|
|
606
608
|
/**
|
|
@@ -608,11 +610,11 @@ export const zipWith: {
|
|
|
608
610
|
* @since 2.0.0
|
|
609
611
|
*/
|
|
610
612
|
export const ap: {
|
|
611
|
-
<
|
|
612
|
-
<
|
|
613
|
+
<R, L2>(that: Either<R, L2>): <R2, L>(self: Either<(right: R) => R2, L>) => Either<R2, L | L2>
|
|
614
|
+
<R, R2, L, L2>(self: Either<(right: R) => R2, L>, that: Either<R, L2>): Either<R2, L | L2>
|
|
613
615
|
} = dual(
|
|
614
616
|
2,
|
|
615
|
-
<
|
|
617
|
+
<R, R2, L, L2>(self: Either<(right: R) => R2, L>, that: Either<R, L2>): Either<R2, L | L2> =>
|
|
616
618
|
zipWith(self, that, (f, a) => f(a))
|
|
617
619
|
)
|
|
618
620
|
|
|
@@ -629,8 +631,8 @@ export const ap: {
|
|
|
629
631
|
* import * as Either from "effect/Either"
|
|
630
632
|
*
|
|
631
633
|
* assert.deepStrictEqual(Either.all([Either.right(1), Either.right(2)]), Either.right([1, 2]))
|
|
632
|
-
* assert.deepStrictEqual(Either.all({
|
|
633
|
-
* assert.deepStrictEqual(Either.all({
|
|
634
|
+
* assert.deepStrictEqual(Either.all({ right: Either.right(1), b: Either.right("hello") }), Either.right({ right: 1, b: "hello" }))
|
|
635
|
+
* assert.deepStrictEqual(Either.all({ right: Either.right(1), b: Either.left("error") }), Either.left("error"))
|
|
634
636
|
*
|
|
635
637
|
* @category combining
|
|
636
638
|
* @since 2.0.0
|
|
@@ -639,13 +641,13 @@ export const ap: {
|
|
|
639
641
|
export const all: <const I extends Iterable<Either<any, any>> | Record<string, Either<any, any>>>(
|
|
640
642
|
input: I
|
|
641
643
|
) => [I] extends [ReadonlyArray<Either<any, any>>] ? Either<
|
|
642
|
-
|
|
643
|
-
|
|
644
|
+
{ -readonly [K in keyof I]: [I[K]] extends [Either<infer R, any>] ? R : never },
|
|
645
|
+
I[number] extends never ? never : [I[number]] extends [Either<any, infer L>] ? L : never
|
|
644
646
|
>
|
|
645
|
-
: [I] extends [Iterable<Either<infer
|
|
647
|
+
: [I] extends [Iterable<Either<infer R, infer L>>] ? Either<Array<R>, L>
|
|
646
648
|
: Either<
|
|
647
|
-
|
|
648
|
-
|
|
649
|
+
{ -readonly [K in keyof I]: [I[K]] extends [Either<infer R, any>] ? R : never },
|
|
650
|
+
I[keyof I] extends never ? never : [I[keyof I]] extends [Either<any, infer L>] ? L : never
|
|
649
651
|
> = (
|
|
650
652
|
input: Iterable<Either<any, any>> | Record<string, Either<any, any>>
|
|
651
653
|
): Either<any, any> => {
|
|
@@ -678,7 +680,7 @@ export const all: <const I extends Iterable<Either<any, any>> | Record<string, E
|
|
|
678
680
|
* @since 2.0.0
|
|
679
681
|
* @category mapping
|
|
680
682
|
*/
|
|
681
|
-
export const flip = <
|
|
683
|
+
export const flip = <R, L>(self: Either<R, L>): Either<L, R> => isLeft(self) ? right(self.left) : left(self.right)
|
|
682
684
|
|
|
683
685
|
const adapter = Gen.adapter<EitherTypeLambda>()
|
|
684
686
|
|
|
@@ -708,3 +710,83 @@ export const gen: Gen.Gen<EitherTypeLambda, Gen.Adapter<EitherTypeLambda>> = (f)
|
|
|
708
710
|
return right(state.value)
|
|
709
711
|
}
|
|
710
712
|
}
|
|
713
|
+
|
|
714
|
+
// -------------------------------------------------------------------------------------
|
|
715
|
+
// do notation
|
|
716
|
+
// -------------------------------------------------------------------------------------
|
|
717
|
+
|
|
718
|
+
/**
|
|
719
|
+
* @since 2.4.0
|
|
720
|
+
* @category do notation
|
|
721
|
+
*/
|
|
722
|
+
export const Do: Either<{}> = right({})
|
|
723
|
+
|
|
724
|
+
/**
|
|
725
|
+
* Binds an effectful value in a `do` scope
|
|
726
|
+
*
|
|
727
|
+
* @since 2.4.0
|
|
728
|
+
* @category do notation
|
|
729
|
+
*/
|
|
730
|
+
export const bind: {
|
|
731
|
+
<N extends string, K, A, E2>(
|
|
732
|
+
tag: Exclude<N, keyof K>,
|
|
733
|
+
f: (_: K) => Either<A, E2>
|
|
734
|
+
): <E>(self: Either<K, E>) => Either<MergeRecord<K, { [k in N]: A }>, E2 | E>
|
|
735
|
+
<K, E, N extends string, A, E2>(
|
|
736
|
+
self: Either<E, K>,
|
|
737
|
+
tag: Exclude<N, keyof K>,
|
|
738
|
+
f: (_: K) => Either<A, E2>
|
|
739
|
+
): Either<MergeRecord<K, { [k in N]: A }>, E2 | E>
|
|
740
|
+
} = dual(3, <K, E, N extends string, A, E2>(
|
|
741
|
+
self: Either<K, E>,
|
|
742
|
+
tag: Exclude<N, keyof K>,
|
|
743
|
+
f: (_: K) => Either<A, E2>
|
|
744
|
+
): Either<MergeRecord<K, { [k in N]: A }>, E2 | E> =>
|
|
745
|
+
flatMap(self, (k) =>
|
|
746
|
+
map(
|
|
747
|
+
f(k),
|
|
748
|
+
(a): MergeRecord<K, { [k in N]: A }> => ({ ...k, [tag]: a } as any)
|
|
749
|
+
)))
|
|
750
|
+
|
|
751
|
+
/**
|
|
752
|
+
* @category do notation
|
|
753
|
+
* @since 2.4.0
|
|
754
|
+
*/
|
|
755
|
+
export const bindTo: {
|
|
756
|
+
<N extends string>(tag: N): <A, E>(self: Either<A, E>) => Either<Record<N, A>, E>
|
|
757
|
+
<A, E, N extends string>(self: Either<A, E>, tag: N): Either<Record<N, A>, E>
|
|
758
|
+
} = dual(
|
|
759
|
+
2,
|
|
760
|
+
<A, E, N extends string>(self: Either<A, E>, tag: N): Either<Record<N, A>, E> =>
|
|
761
|
+
map(self, (a) => ({ [tag]: a } as Record<N, A>))
|
|
762
|
+
)
|
|
763
|
+
|
|
764
|
+
const let_: {
|
|
765
|
+
<N extends string, K, A>(
|
|
766
|
+
tag: Exclude<N, keyof K>,
|
|
767
|
+
f: (_: K) => A
|
|
768
|
+
): <E>(self: Either<K, E>) => Either<MergeRecord<K, { [k in N]: A }>, E>
|
|
769
|
+
<K, E, N extends string, A>(
|
|
770
|
+
self: Either<K, E>,
|
|
771
|
+
tag: Exclude<N, keyof K>,
|
|
772
|
+
f: (_: K) => A
|
|
773
|
+
): Either<MergeRecord<K, { [k in N]: A }>, E>
|
|
774
|
+
} = dual(3, <K, E, N extends string, A>(
|
|
775
|
+
self: Either<K, E>,
|
|
776
|
+
tag: Exclude<N, keyof K>,
|
|
777
|
+
f: (_: K) => A
|
|
778
|
+
): Either<MergeRecord<K, { [k in N]: A }>, E> =>
|
|
779
|
+
map(
|
|
780
|
+
self,
|
|
781
|
+
(k): MergeRecord<K, { [k in N]: A }> => ({ ...k, [tag]: f(k) } as any)
|
|
782
|
+
))
|
|
783
|
+
|
|
784
|
+
export {
|
|
785
|
+
/**
|
|
786
|
+
* Like bind for values
|
|
787
|
+
*
|
|
788
|
+
* @since 2.4.0
|
|
789
|
+
* @category do notation
|
|
790
|
+
*/
|
|
791
|
+
let_ as let
|
|
792
|
+
}
|
package/src/Encoding.ts
CHANGED
|
@@ -28,7 +28,7 @@ export const encodeBase64: (input: Uint8Array | string) => string = (input) =>
|
|
|
28
28
|
* @category decoding
|
|
29
29
|
* @since 2.0.0
|
|
30
30
|
*/
|
|
31
|
-
export const decodeBase64 = (str: string): Either.Either<
|
|
31
|
+
export const decodeBase64 = (str: string): Either.Either<Uint8Array, DecodeException> => Base64.decode(str)
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* Decodes a base64 (RFC4648) encoded `string` into a UTF-8 `string`.
|
|
@@ -53,7 +53,7 @@ export const encodeBase64Url: (input: Uint8Array | string) => string = (input) =
|
|
|
53
53
|
* @category decoding
|
|
54
54
|
* @since 2.0.0
|
|
55
55
|
*/
|
|
56
|
-
export const decodeBase64Url = (str: string): Either.Either<
|
|
56
|
+
export const decodeBase64Url = (str: string): Either.Either<Uint8Array, DecodeException> => Base64Url.decode(str)
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
59
|
* Decodes a base64 (URL) encoded `string` into a UTF-8 `string`.
|
|
@@ -78,7 +78,7 @@ export const encodeHex: (input: Uint8Array | string) => string = (input) =>
|
|
|
78
78
|
* @category decoding
|
|
79
79
|
* @since 2.0.0
|
|
80
80
|
*/
|
|
81
|
-
export const decodeHex = (str: string): Either.Either<
|
|
81
|
+
export const decodeHex = (str: string): Either.Either<Uint8Array, DecodeException> => Hex.decode(str)
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
84
|
* Decodes a hex encoded `string` into a UTF-8 `string`.
|