FlowModule

PackageAxial
Represents a cold workflow that reads an environment, returns a typed result, and is executed explicitly through one of its execution members such as ToTask, ToAsync, or RunSynchronously.

Summary

NameSignatureSynopsis
Union cases
RunSynchronouslythis.RunSynchronouslyStarts the workflow and blocks until the final exit is available.
StartAsTaskthis.StartAsTaskStarts the workflow immediately and returns a task handle for its final exit.
StartAsValueTaskthis.StartAsValueTaskStarts the workflow immediately and returns a value-task handle for its final exit.
ToAsyncthis.ToAsyncBuilds a cold async that runs the workflow when it is started.
Operations
scopeAsyncFinalizerscopeAsyncFinalizer finalizerRegisters a F# async finalizer with the current runtime scope on .NET or Fable.
ofExitofExit exitCreates a flow from an execution outcome.
scopeFinalizerscopeFinalizer finalizerRegisters an asynchronous finalizer with the current runtime scope.
scopeDisposablescopeDisposable resourceRegisters a disposable resource with the current runtime scope.
scopeAsyncDisposablescopeAsyncDisposable resourceRegisters an asynchronously disposable resource with the current runtime scope.
scopeResourcescopeResource (Resource(acquire, register)Acquires a described resource and registers its release with the current runtime scope.
scopeAcquireReleasescopeAcquireRelease acquire releaseAcquires a value and registers its release with the current runtime scope.
scopedscoped flowRuns a flow in a child scope and closes that scope before returning.
fromAsyncfromAsync operationCreates a flow from a raw async operation.
fromAsyncResultfromAsyncResult operationCreates a flow from an async operation whose Error enters the typed error channel.
attemptAsyncattemptAsync operationCreates a flow from an async operation and treats thrown exceptions as recoverable typed errors.
fromBlockingfromBlocking operationCreates a flow from synchronous, blocking work, such as a database driver or native library call.
fromBlockingResultfromBlockingResult operationCreates a flow from blocking work whose Error enters the typed error channel.
attemptBlockingattemptBlocking operationCreates a flow from blocking work and treats thrown exceptions as recoverable typed errors.
fromTaskfromTask factoryCreates a flow from a cancellable task factory.
fromTaskResultfromTaskResult factoryCreates a flow from a cold task factory whose Error enters the typed error channel.
attemptTaskattemptTask factoryCreates a flow from a cancellable task factory and treats thrown exceptions as recoverable typed errors.
fromValueTaskfromValueTask factoryCreates a flow from a cancellable value-task factory.
fromValueTaskResultfromValueTaskResult factoryCreates a flow from a cold value-task factory whose Error enters the typed error channel.
attemptValueTaskattemptValueTask factoryCreates a flow from a cancellable value-task factory and treats thrown exceptions as recoverable typed errors.
awaitStartedTaskawaitStartedTask startedTaskObserves a task that has already been started.
awaitStartedTaskResultawaitStartedTaskResult startedTaskObserves an already-started task whose Error enters the typed error channel.
attemptStartedTaskattemptStartedTask startedTaskObserves a task that has already been started and treats thrown exceptions as recoverable typed errors.
awaitStartedValueTaskawaitStartedValueTask startedValueTaskObserves a value task that has already been started.
awaitStartedValueTaskResultawaitStartedValueTaskResult startedValueTaskObserves an already-started value task whose Error enters the typed error channel.
attemptStartedValueTaskattemptStartedValueTask startedValueTaskObserves a value task that has already been started and treats thrown exceptions as recoverable typed errors.
okok valueCreates a successful synchronous flow.
succeedsucceed valueSame as ok.
errorerror failureCreates a failing synchronous flow.
failfail failureSame as error.
diedie exnCreates a defective flow that fails with an exception.
fromResultfromResult resultLifts a into a synchronous flow.
verifyverify policy inputCreates a flow that verifies an input with an environment-aware policy.
withFiberObserverwithFiberObserver observer flowInstalls runtime fiber-lifecycle hooks for diagnostics and telemetry.
addFiberObserveraddFiberObserver observer flowAdds runtime fiber-lifecycle hooks, composing with any observer already installed.
withFiberRegistrywithFiberRegistry registry flowTracks every fiber forked inside the flow in registry.
withAnnotationSinkwithAnnotationSink sink flowInstalls a runtime annotation sink for integration packages.
addAnnotationSinkaddAnnotationSink sink flowAdds a runtime annotation sink, composing with any sink already installed.
annotateannotate name value flowAdds a runtime annotation for the duration of the supplied flow.
withTraceIdwithTraceId traceId flowAdds the standard trace_id runtime annotation for the duration of the supplied flow.
cancellationTokencancellationToken Reads the current runtime cancellation token.
ensureNotCanceledensureNotCanceled Stops with Cause.Interrupt if the runtime's cancellation token has been cancelled.
catchCancellationcatchCancellation handler flowTurns cancellation that a flow raised for its own reasons into a typed error.
sleepsleep delaySuspends the flow for the specified duration, observing cancellation.
scopescope Reads the current runtime scope.
annotationsannotations Reads the current runtime annotations.
traceIdtraceId Reads the current trace id annotation, if one is present.
fiberIdfiberId Reads the current fiber id from the ambient runtime context.
timeouttimeout after timeoutError flowFails with the supplied typed error when the flow does not complete before the timeout.
timeoutToOktimeoutToOk after value flowReturns the supplied success value when the flow does not complete before the timeout.
timeoutToErrortimeoutToError after error flowSame as timeout; named to pair with timeoutToOk.
timeoutWithtimeoutWith after fallback flowRuns a fallback flow when the source flow does not complete before the timeout.
retryretry schedule flowRetries a flow's typed failures according to a schedule.
repeatrepeat schedule flowRepeats a successful flow according to a schedule.
supervisesupervise schedule flowRestarts a flow that terminates with an unexpected defect, according to a schedule.
forkfork flowStarts a flow in a new fiber without waiting for it to complete.
forkNamedforkNamed name flowStarts a flow in a new fiber carrying a diagnostic name.
forkGracefulforkGraceful stop grace flowStarts a flow in a new fiber that, when its forking scope closes, is asked to stop and given time to finish before it is interrupted.
forkDetachedforkDetached flowStarts a flow in a new fiber that is deliberately never awaited.
memoizememoize flowReturns a flow that runs flow at most once at a time and remembers its value.
forkReplacingforkReplacing slot flowStarts a flow in a new fiber held by slot, interrupting the fiber it replaces.
forkReplacingKeyforkReplacingKey key slots flowStarts a flow in a new fiber held under key, interrupting that key's previous fiber.
zipParzipPar left rightCombines two flows into a tuple of their values, running them concurrently.
sequenceParsequencePar flowsRuns all flows concurrently and returns their values in input order.
racerace left rightRuns two flows concurrently and returns the result of the first one to complete.
fromOptionfromOption error valueLifts an option into a synchronous flow with the supplied error.
fromValueOptionfromValueOption error valueLifts a value option into a synchronous flow with the supplied error.
orElseFloworElseFlow errorFlow resultAttaches an environment-derived error to a result that failed without one; the error flow runs only on failure.
envenv Reads the current environment as the successful flow value.
envWithenvWith projectionProjects one value from the current environment.
mapmap mapper flowTransforms the successful value of a flow.
ignoreignore flowMaps the successful value of a synchronous flow to unit.
bindbind binder flowSequences a dependent flow after a successful value.
(>>=)flow >>= binderSequences a synchronous continuation after a successful value.
taptap binder flowRuns an effect on success and preserves the original value.
tapErrortapError binder flowRuns a synchronous side effect on failure and preserves the original error.
mapErrormapError mapper flowMaps the error value of a synchronous flow.
widenErrorwidenError flowGives a flow that cannot fail with a typed error any error type.
tracedErrortracedError trace flowAttaches diagnostic trace text to any failure cause of the flow.
mapBothmapBoth onSuccess onFailure flowMaps both the successful value and the failure cause of a synchronous flow.
foldfold onSuccess onFailure flowFolds both the successful value and the failure cause into a new flow.
onExitonExit handler flowRuns a handler with the flow's final outcome, whether it succeeded, failed, or was interrupted.
ensuringensuring finalizer flowRuns a finalizer after the flow, however it ends.
onInterruptonInterrupt handler flowRuns a handler only if the flow is interrupted.
nevernever A flow that never completes on its own; it ends only when it is interrupted.
catchcatch handler flowCatches exceptions raised during execution and simple defect outcomes, then maps them to a typed error.
orElseWithorElseWith fallback flowComputes a fallback flow from the typed error when the source flow fails.
orElseorElse fallback flowFalls back to another flow when the source flow fails.
zipzip left rightRuns two flows sequentially and combines their successful values into a tuple.
map2map2 mapper left rightCombines two flows with a mapping function.
applyapply flow valueApplies a flow-wrapped function to a flow-wrapped value.
map3map3 mapper left middle rightCombines three flows with a mapping function.
(<!>)mapper flowMaps the successful value of a synchronous flow.
(<*>)flow <*> valueApplies a flow-wrapped function to a flow-wrapped value.
localEnvlocalEnv mapping flowRuns a flow against an environment derived from the outer environment.
delaydelay factoryDefers flow construction until execution time.
traversetraverse mapping valuesTransforms a sequence of values into a flow and stops at the first failure.
traversePartraversePar parallelism mapping valuesMaps values to flows and runs them with bounded concurrency, returning results in input order.
traverseParUsingtraverseParUsing parallelism resource mapping valuesLike traversePar, giving each worker its own resource, acquired once and reused for every value it maps.
forEachParforEachPar parallelism action valuesRuns a flow for each value with bounded concurrency, discarding the results.
forEachParUsingforEachParUsing parallelism resource action valuesLike forEachPar, giving each worker its own resource, acquired once and reused for every value it processes.
sequencesequence flowsTransforms a sequence of flows into a flow of a sequence and stops at the first failure.
toAsynctoAsync environment flowBuilds a cold async that runs the workflow when it is started.
startTaskstartTask environment flowStarts the workflow immediately and returns a task handle for its final exit.
runrun environment flowRuns the workflow and blocks until the final exit is available.

Union cases

kind:member

RunSynchronously

this.RunSynchronously
Member
Starts the workflow and blocks until the final exit is available.

Parameters

NameTypeDescription
environment'envThe environment used by the workflow.
cancellationTokenCancellationToken

Returns

Exit<'value, 'error>
kind:member

StartAsTask

this.StartAsTask
Member
Starts the workflow immediately and returns a task handle for its final exit.

Parameters

NameTypeDescription
environment'envThe environment used by the workflow.
cancellationTokenCancellationToken

Returns

Task<Exit<'value, 'error>>
kind:member

StartAsValueTask

this.StartAsValueTask
Member
Starts the workflow immediately and returns a value-task handle for its final exit.

Parameters

NameTypeDescription
environment'envThe environment used by the workflow.
cancellationTokenCancellationToken

Returns

ValueTask<Exit<'value, 'error>>
kind:member

ToAsync

this.ToAsync
Member
Builds a cold async that runs the workflow when it is started.

Parameters

NameTypeDescription
environment'envThe environment used by the workflow.
cancellationTokenCancellationToken

Returns

Async<Exit<'value, 'error>>

Operations

kind:member

scopeAsyncFinalizer

scopeAsyncFinalizer finalizer
Member
Registers a F# async finalizer with the current runtime scope on .NET or Fable.

Parameters

NameTypeDescription
finalizerCancellationToken -> Async<unit>

Returns

Flow<'env, 'error, unit>

Verification Examples

Flow.scopeAsyncFinalizer (fun _ -> async { resource.Close() })
kind:member

ofExit

ofExit exit
Member
Creates a flow from an execution outcome.

Parameters

NameTypeDescription
exitExit<'value, 'error>

Returns

Flow<'env, 'error, 'value>
kind:member

scopeFinalizer

scopeFinalizer finalizer
Member
Registers an asynchronous finalizer with the current runtime scope.

Parameters

NameTypeDescription
finalizerCancellationToken -> TaskThe finalizer to run when the current scope closes.

Returns

Flow<'env, 'error, unit>
kind:member

scopeDisposable

scopeDisposable resource
Member
Registers a disposable resource with the current runtime scope.

Parameters

NameTypeDescription
resourceIDisposableThe disposable resource to close when the current scope closes.

Returns

Flow<'env, 'error, unit>
kind:member

scopeAsyncDisposable

scopeAsyncDisposable resource
Member
Registers an asynchronously disposable resource with the current runtime scope.

Parameters

NameTypeDescription
resourceIAsyncDisposableThe async disposable resource to close when the current scope closes.

Returns

Flow<'env, 'error, unit>
kind:member

scopeResource

scopeResource (Resource(acquire, register)
Member
Acquires a described resource and registers its release with the current runtime scope.

Parameters

NameTypeDescription
Resource(acquire, registerResource<'env, 'error, 'value>

Returns

Flow<'env, 'error, 'value>
kind:member

scopeAcquireRelease

scopeAcquireRelease acquire release
Member
Acquires a value and registers its release with the current runtime scope.

Parameters

NameTypeDescription
acquireFlow<'env, 'error, 'resource>The flow that acquires the value.
release'resource -> CancellationToken -> TaskThe release action run when the current scope closes.

Returns

Flow<'env, 'error, 'resource>
kind:member

scoped

scoped flow
Member
Runs a flow in a child scope and closes that scope before returning.

Parameters

NameTypeDescription
flowFlow<'env, 'error, 'value>

Returns

Flow<'env, 'error, 'value>
kind:member

fromAsync

fromAsync operation
Member
Creates a flow from a raw async operation.

Parameters

NameTypeDescription
operationAsync<'value>

Returns

Flow<'env, 'error, 'value>
kind:member

fromAsyncResult

fromAsyncResult operation
Member
Creates a flow from an async operation whose Error enters the typed error channel.

Parameters

NameTypeDescription
operationAsync<Result<'value, 'error>>

Returns

Flow<'env, 'error, 'value>
kind:member

attemptAsync

attemptAsync operation
Member
Creates a flow from an async operation and treats thrown exceptions as recoverable typed errors.

Parameters

NameTypeDescription
operationAsync<'value>

Returns

Flow<'env, exn, 'value>
kind:member

fromBlocking

fromBlocking operation
Member
Creates a flow from synchronous, blocking work, such as a database driver or native library call.

Parameters

NameTypeDescription
operationCancellationToken -> 'valueThe blocking operation, observing the supplied cancellation token where it can.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let commits = Flow.fromBlocking (fun _ -> repository.Commits |> Seq.truncate 50 |> List.ofSeq)
kind:member

fromBlockingResult

fromBlockingResult operation
Member
Creates a flow from blocking work whose Error enters the typed error channel.

Parameters

NameTypeDescription
operationCancellationToken -> Result<'value, 'error>The blocking operation, observing the supplied cancellation token where it can.

Returns

Flow<'env, 'error, 'value>
kind:member

attemptBlocking

attemptBlocking operation
Member
Creates a flow from blocking work and treats thrown exceptions as recoverable typed errors.

Parameters

NameTypeDescription
operationCancellationToken -> 'valueThe blocking operation, observing the supplied cancellation token where it can.

Returns

Flow<'env, exn, 'value>
kind:member

fromTask

fromTask factory
Member
Creates a flow from a cancellable task factory.

Parameters

NameTypeDescription
factoryCancellationToken -> Task<'value>Starts the operation, observing the supplied cancellation token.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.fromTask (fun token -> client.GetStringAsync(url, token))
kind:member

fromTaskResult

fromTaskResult factory
Member
Creates a flow from a cold task factory whose Error enters the typed error channel.

Parameters

NameTypeDescription
factoryCancellationToken -> Task<Result<'value, 'error>>

Returns

Flow<'env, 'error, 'value>
kind:member

attemptTask

attemptTask factory
Member
Creates a flow from a cancellable task factory and treats thrown exceptions as recoverable typed errors.

Parameters

NameTypeDescription
factoryCancellationToken -> Task<'value>Starts the operation, observing the supplied cancellation token.

Returns

Flow<'env, exn, 'value>
kind:member

fromValueTask

fromValueTask factory
Member
Creates a flow from a cancellable value-task factory.

Parameters

NameTypeDescription
factoryCancellationToken -> ValueTask<'value>Starts the operation, observing the supplied cancellation token.

Returns

Flow<'env, 'error, 'value>
kind:member

fromValueTaskResult

fromValueTaskResult factory
Member
Creates a flow from a cold value-task factory whose Error enters the typed error channel.

Parameters

NameTypeDescription
factoryCancellationToken -> ValueTask<Result<'value, 'error>>

Returns

Flow<'env, 'error, 'value>
kind:member

attemptValueTask

attemptValueTask factory
Member
Creates a flow from a cancellable value-task factory and treats thrown exceptions as recoverable typed errors.

Parameters

NameTypeDescription
factoryCancellationToken -> ValueTask<'value>Starts the operation, observing the supplied cancellation token.

Returns

Flow<'env, exn, 'value>
kind:member

awaitStartedTask

awaitStartedTask startedTask
Member
Observes a task that has already been started.

Parameters

NameTypeDescription
startedTaskTask<'value>A task that is already running.

Returns

Flow<'env, 'error, 'value>
kind:member

awaitStartedTaskResult

awaitStartedTaskResult startedTask
Member
Observes an already-started task whose Error enters the typed error channel.

Parameters

NameTypeDescription
startedTaskTask<Result<'value, 'error>>

Returns

Flow<'env, 'error, 'value>
kind:member

attemptStartedTask

attemptStartedTask startedTask
Member
Observes a task that has already been started and treats thrown exceptions as recoverable typed errors.

Parameters

NameTypeDescription
startedTaskTask<'value>A task that is already running.

Returns

Flow<'env, exn, 'value>
kind:member

awaitStartedValueTask

awaitStartedValueTask startedValueTask
Member
Observes a value task that has already been started.

Parameters

NameTypeDescription
startedValueTaskValueTask<'value>A value task that is already running.

Returns

Flow<'env, 'error, 'value>
kind:member

awaitStartedValueTaskResult

awaitStartedValueTaskResult startedValueTask
Member
Observes an already-started value task whose Error enters the typed error channel.

Parameters

NameTypeDescription
startedValueTaskValueTask<Result<'value, 'error>>

Returns

Flow<'env, 'error, 'value>
kind:member

attemptStartedValueTask

attemptStartedValueTask startedValueTask
Member
Observes a value task that has already been started and treats thrown exceptions as recoverable typed errors.

Parameters

NameTypeDescription
startedValueTaskValueTask<'value>A value task that is already running.

Returns

Flow<'env, exn, 'value>
kind:member

ok

ok value
Member
Creates a successful synchronous flow.

Parameters

NameTypeDescription
value'valueThe value to wrap in a successful flow.

Returns

Flow<'env, 'error, 'value>
kind:member

succeed

succeed value
Member
Same as ok.

Parameters

NameTypeDescription
value'valueThe value to wrap in a successful flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let result = Flow.succeed 42 |> Flow.run ()
// result = Success 42
kind:member

error

error failure
Member
Creates a failing synchronous flow.

Parameters

NameTypeDescription
failure'errorThe error value to wrap in a failing flow.

Returns

Flow<'env, 'error, 'value>
kind:member

fail

fail failure
Member
Same as error.

Parameters

NameTypeDescription
failure'errorThe error value to wrap in a failing flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let result = Flow.fail "error" |> Flow.run ()
// result = Failure (Cause.Fail "error")
kind:member

die

die exn
Member
Creates a defective flow that fails with an exception.

Parameters

NameTypeDescription
exnexnThe exception representing the defect.

Returns

Flow<'env, 'error, 'value>
kind:member

fromResult

fromResult result
Member
Lifts a Result`2 into a synchronous flow.

Parameters

NameTypeDescription
resultResult<'value, 'error>The result value to lift.

Returns

Flow<'env, 'error, 'value>

Verification Examples

Flow.fromResult (Ok "success") |> Flow.run ()
kind:member

verify

verify policy input
Member
Creates a flow that verifies an input with an environment-aware policy.

Parameters

NameTypeDescription
policyPolicy<'env, 'error, 'input, 'output>The reusable verification rule to apply.
input'inputThe input value to verify.

Returns

Flow<'env, 'error, 'output>
kind:member

withFiberObserver

withFiberObserver observer flow
Member
Installs runtime fiber-lifecycle hooks for diagnostics and telemetry.

Parameters

NameTypeDescription
observerFiberObserverThe lifecycle hooks. Start from FiberObserver.none and override what you need.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

addFiberObserver

addFiberObserver observer flow
Member
Adds runtime fiber-lifecycle hooks, composing with any observer already installed.

Parameters

NameTypeDescription
observerFiberObserverThe lifecycle hooks to add.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

withFiberRegistry

withFiberRegistry registry flow
Member
Tracks every fiber forked inside the flow in registry.

Parameters

NameTypeDescription
registryFiberRegistryThe registry that receives fiber lifecycle events.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

withAnnotationSink

withAnnotationSink sink flow
Member
Installs a runtime annotation sink for integration packages.

Parameters

NameTypeDescription
sinkstring -> string -> unit
flowFlow<'env, 'error, 'value>

Returns

Flow<'env, 'error, 'value>
kind:member

addAnnotationSink

addAnnotationSink sink flow
Member
Adds a runtime annotation sink, composing with any sink already installed.

Parameters

NameTypeDescription
sinkstring -> string -> unit
flowFlow<'env, 'error, 'value>

Returns

Flow<'env, 'error, 'value>
kind:member

annotate

annotate name value flow
Member
Adds a runtime annotation for the duration of the supplied flow.

Parameters

NameTypeDescription
namestringThe annotation key.
valuestringThe annotation value.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

withTraceId

withTraceId traceId flow
Member
Adds the standard trace_id runtime annotation for the duration of the supplied flow.

Parameters

NameTypeDescription
traceIdstringThe trace identifier.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

cancellationToken

cancellationToken
Member
Reads the current runtime cancellation token.

Returns

Flow<'env, 'error, CancellationToken>
kind:member

ensureNotCanceled

ensureNotCanceled
Member
Stops with Cause.Interrupt if the runtime's cancellation token has been cancelled.

Returns

Flow<'env, 'error, unit>

Verification Examples

let sumSquares (values: int list) : Flow<unit, string, int> =
    flow {
        let mutable total = 0
        for value in values do
            do! Flow.ensureNotCanceled
            total <- total + value * value
        return total
    }
kind:member

catchCancellation

catchCancellation handler flow
Member
Turns cancellation that a flow raised for its own reasons into a typed error.

Parameters

NameTypeDescription
handlerOperationCanceledException -> 'errorMaps the cancellation exception into the workflow error type.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

sleep

sleep delay
Member
Suspends the flow for the specified duration, observing cancellation.

Parameters

NameTypeDescription
delayTimeSpanThe duration to sleep.

Returns

Flow<'env, 'error, unit>
kind:member

scope

scope
Member
Reads the current runtime scope.

Returns

Flow<'env, 'error, Scope>
kind:member

annotations

annotations
Member
Reads the current runtime annotations.

Returns

Flow<'env, 'error, Map<string, string>>
kind:member

traceId

traceId
Member
Reads the current trace id annotation, if one is present.

Returns

Flow<'env, 'error, string option>
kind:member

fiberId

fiberId
Member
Reads the current fiber id from the ambient runtime context.

Returns

Flow<'env, 'error, FiberId>
kind:member

timeout

timeout after timeoutError flow
Member
Fails with the supplied typed error when the flow does not complete before the timeout.

Parameters

NameTypeDescription
afterTimeSpanThe timeout duration.
timeoutError'errorThe typed error returned when the timeout wins.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

timeoutToOk

timeoutToOk after value flow
Member
Returns the supplied success value when the flow does not complete before the timeout.

Parameters

NameTypeDescription
afterTimeSpanThe timeout duration.
value'valueThe success value returned when the timeout wins.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

timeoutToError

timeoutToError after error flow
Member
Same as timeout; named to pair with timeoutToOk.

Parameters

NameTypeDescription
afterTimeSpan
error'error
flowFlow<'env, 'error, 'value>

Returns

Flow<'env, 'error, 'value>
kind:member

timeoutWith

timeoutWith after fallback flow
Member
Runs a fallback flow when the source flow does not complete before the timeout.

Parameters

NameTypeDescription
afterTimeSpanThe timeout duration.
fallbackunit -> Flow<'env, 'error, 'value>Creates the fallback flow when the timeout wins.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>
kind:member

retry

retry schedule flow
Member
Retries a flow's typed failures according to a schedule.

Parameters

NameTypeDescription
scheduleSchedule<'env, 'error, 'output>Decides, from each typed error, whether to retry and after what delay.
flowFlow<'env, 'error, 'value>The flow to retry.

Returns

Flow<'env, 'error, 'value>

Verification Examples

fetch |> Flow.retry (Schedule.recurs 3)

fetch |> Flow.retry (Retry.schedule { Retry.defaults with When = HttpError.isTransient })
kind:member

repeat

repeat schedule flow
Member
Repeats a successful flow according to a schedule.

Parameters

NameTypeDescription
scheduleSchedule<'env, 'value, 'output>Decides, from each value, whether to repeat and after what delay.
flowFlow<'env, 'error, 'value>The flow to repeat.

Returns

Flow<'env, 'error, 'value>

Verification Examples

heartbeat |> Flow.repeat (Schedule.spaced (TimeSpan.FromSeconds 5.0))
kind:member

supervise

supervise schedule flow
Member
Restarts a flow that terminates with an unexpected defect, according to a schedule.

Parameters

NameTypeDescription
scheduleSchedule<'env, exn, 'output>Decides, from each defect, whether to restart and after what delay.
flowFlow<'env, 'error, 'value>The flow to supervise.

Returns

Flow<'env, 'error, 'value>

Verification Examples

worker |> Flow.supervise (Retry.schedule { Retry.defaults with Retries = 5 })
kind:member

fork

fork flow
Member
Starts a flow in a new fiber without waiting for it to complete.

Parameters

NameTypeDescription
flowFlow<'env, 'error, 'value>The flow to fork.

Returns

Flow<'env, 'none, Fiber<'error, 'value>>
kind:member

forkNamed

forkNamed name flow
Member
Starts a flow in a new fiber carrying a diagnostic name.

Parameters

NameTypeDescription
namestringThe diagnostic name recorded in the fiber's metadata.
flowFlow<'env, 'error, 'value>The flow to fork.

Returns

Flow<'env, 'none, Fiber<'error, 'value>>
kind:member

forkGraceful

forkGraceful stop grace flow
Member
Starts a flow in a new fiber that, when its forking scope closes, is asked to stop and given time to finish before it is interrupted.

Parameters

NameTypeDescription
stopFlow<'env, Never, unit>Asks the fiber to finish, for example by shutting down the queue it consumes.
graceTimeSpanHow long to wait after stop before interrupting the fiber.
flowFlow<'env, 'error, 'value>The flow to fork.

Returns

Flow<'env, 'none, Fiber<'error, 'value>>

Verification Examples

flow {
    let! (samples: Queue<float>) = Queue.bounded 1000
    let! _ =
        samples
        |> FlowStream.fromDequeue
        |> FlowStream.runForEachFlow writeSample
        |> Flow.forkGraceful (Dequeue.shutdown samples) (TimeSpan.FromSeconds 5.0)
    do! samples |> Queue.offer 21.5 |> Flow.ignore
}
|> Flow.scoped // closing the scope flushes every offered sample before returning
kind:member

forkDetached

forkDetached flow
Member
Starts a flow in a new fiber that is deliberately never awaited.

Parameters

NameTypeDescription
flowFlow<'env, 'error, 'value>The flow to fork.

Returns

Flow<'env, 'none, Fiber<'error, 'value>>
kind:member

memoize

memoize flow
Member
Returns a flow that runs flow at most once at a time and remembers its value.

Parameters

NameTypeDescription
flowFlow<'env, 'error, 'value>The computation to share.

Returns

Flow<'env, 'none, Flow<'caller, 'error, 'value>>

Verification Examples

let readConfig : Flow<unit, string, string> = Flow.delay (fun () -> Flow.ok "config")

let sameConfig : Flow<unit, string, bool> =
    flow {
        let! loadConfig = Flow.memoize readConfig
        let! a = loadConfig
        let! b = loadConfig // readConfig ran once
        return a = b
    }
kind:member

forkReplacing

forkReplacing slot flow
Member
Starts a flow in a new fiber held by slot, interrupting the fiber it replaces.

Parameters

NameTypeDescription
slotFiberSlot<'error, 'value>The slot that holds the current fiber.
flowFlow<'env, 'error, 'value>The flow to run.

Returns

Flow<'env, 'none, Fiber<'error, 'value>>

Verification Examples

let onQueryChanged slot query =
    search query |> Flow.forkReplacing slot |> Flow.ignore
kind:member

forkReplacingKey

forkReplacingKey key slots flow
Member
Starts a flow in a new fiber held under key, interrupting that key's previous fiber.

Parameters

NameTypeDescription
key'keyThe key whose previous fiber is replaced.
slotsKeyedFiberSlot<'key, 'error, 'value>The keyed slot that holds the current fibers.
flowFlow<'env, 'error, 'value>The flow to run.

Returns

Flow<'env, 'none, Fiber<'error, 'value>>

Verification Examples

loadPreview document |> Flow.forkReplacingKey document.Id previews
kind:member

zipPar

zipPar left right
Member
Combines two flows into a tuple of their values, running them concurrently.

Parameters

NameTypeDescription
leftFlow<'env, 'error, 'left>The first flow to combine.
rightFlow<'env, 'error, 'right>The second flow to combine.

Returns

Flow<'env, 'error, ('left * 'right)>

Verification Examples

let combined = Flow.zipPar (Flow.succeed 1) (Flow.succeed 2)
combined |> Flow.run ()
kind:member

sequencePar

sequencePar flows
Member
Runs all flows concurrently and returns their values in input order.

Parameters

NameTypeDescription
flowsFlow<'env, 'error, 'value> list

Returns

Flow<'env, 'error, 'value list>
kind:member

race

race left right
Member
Runs two flows concurrently and returns the result of the first one to complete.

Parameters

NameTypeDescription
leftFlow<'env, 'error, 'value>The first flow to run.
rightFlow<'env, 'error, 'value>The second flow to run.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let fastOrSlow = Flow.race (Flow.succeed "cached") (Flow.succeed "loaded")
fastOrSlow |> Flow.run ()
kind:member

fromOption

fromOption error value
Member
Lifts an option into a synchronous flow with the supplied error.

Parameters

NameTypeDescription
error'errorThe error to return if the option is None.
value'value optionThe option to lift.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let opt = Some "value"
Flow.fromOption "missing" opt |> Flow.run ()
kind:member

fromValueOption

fromValueOption error value
Member
Lifts a value option into a synchronous flow with the supplied error.

Parameters

NameTypeDescription
error'errorThe error to return if the value option is ValueNone.
value'value voptionThe value option to lift.

Returns

Flow<'env, 'error, 'value>
kind:member

orElseFlow

orElseFlow errorFlow result
Member
Attaches an environment-derived error to a result that failed without one; the error flow runs only on failure.

Parameters

NameTypeDescription
errorFlowFlow<'env, 'error, 'error>A flow that reads the environment to produce an error value.
resultResult<'value, unit>The pure result to bridge.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let result = Result.Error ()
let flow = Flow.orElseFlow (Flow.envWith (fun env -> "error")) result
kind:member

env

env
Member
Reads the current environment as the successful flow value.

Returns

Flow<'env, 'error, 'env>

Verification Examples

let myFlow = Flow.env |> Flow.map (fun env -> env)
kind:member

envWith

envWith projection
Member
Projects one value from the current environment.

Parameters

NameTypeDescription
projection'env -> 'valueA function that extracts a value from the environment.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let currentTime () =
    Flow.envWith (fun (environment: BaseRuntime) -> environment.Clock.UtcNow())
kind:member

map

map mapper flow
Member
Transforms the successful value of a flow.

Parameters

NameTypeDescription
mapper'value -> 'nextA function of type 'value -> 'next to transform the successful value.
flowFlow<'env, 'error, 'value>The source flow of type Axial`3 to transform.

Returns

Flow<'env, 'error, 'next>

Verification Examples

let flow = Flow.succeed 1 |> Flow.map (fun x -> x + 1)
kind:member

ignore

ignore flow
Member
Maps the successful value of a synchronous flow to unit.

Parameters

NameTypeDescription
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, unit>

Verification Examples

let flow = Flow.succeed 42 |> Flow.ignore
kind:member

bind

bind binder flow
Member
Sequences a dependent flow after a successful value.

Parameters

NameTypeDescription
binder'value -> Flow<'env, 'error, 'next>A function that takes the successful value and returns a new flow.
flowFlow<'env, 'error, 'value>The source flow to sequence.

Returns

Flow<'env, 'error, 'next>

Verification Examples

let flow = Flow.succeed 1 |> Flow.bind (fun x -> Flow.succeed (x + 1))
kind:member

(>>=)

flow >>= binder
Member
Sequences a synchronous continuation after a successful value.

Parameters

NameTypeDescription
flowFlow<'env, 'error, 'value>
binder'value -> Flow<'env, 'error, 'next>

Returns

Flow<'env, 'error, 'next>
kind:member

tap

tap binder flow
Member
Runs an effect on success and preserves the original value.

Parameters

NameTypeDescription
binder'value -> Flow<'env, 'error, unit>A function that produces a side-effect flow from the successful value.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.succeed 42 |> Flow.tap (fun x -> Flow.succeed ())
kind:member

tapError

tapError binder flow
Member
Runs a synchronous side effect on failure and preserves the original error.

Parameters

NameTypeDescription
binder'error -> Flow<'env, 'error, unit>A function that produces a side-effect flow from the error value.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.fail "error" |> Flow.tapError (fun err -> Flow.succeed ())
kind:member

mapError

mapError mapper flow
Member
Maps the error value of a synchronous flow.

Parameters

NameTypeDescription
mapper'error -> 'nextErrorThe function to transform the error value.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'nextError, 'value>

Verification Examples

let flow = Flow.fail "error" |> Flow.mapError (fun err -> err + "!")
kind:member

widenError

widenError flow
Member
Gives a flow that cannot fail with a typed error any error type.

Parameters

NameTypeDescription
flowFlow<'env, Never, 'value>

Returns

Flow<'env, 'error, 'value>

Verification Examples

let ready : Flow<unit, string, int> = Flow.succeed 1 |> Flow.widenError
kind:member

tracedError

tracedError trace flow
Member
Attaches diagnostic trace text to any failure cause of the flow.

Parameters

NameTypeDescription
tracestringThe diagnostic trace text, typically an operation or boundary name.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = loadUser |> Flow.tracedError "billing.load-user"
kind:member

mapBoth

mapBoth onSuccess onFailure flow
Member
Maps both the successful value and the failure cause of a synchronous flow.

Parameters

NameTypeDescription
onSuccess'value -> 'nextThe function to transform the success value.
onFailureCause<'error> -> Cause<'nextError>The function to transform the failure cause.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'nextError, 'next>
kind:member

fold

fold onSuccess onFailure flow
Member
Folds both the successful value and the failure cause into a new flow.

Parameters

NameTypeDescription
onSuccess'value -> Flow<'env, 'nextError, 'next>A function that returns a new flow from the success value.
onFailureCause<'error> -> Flow<'env, 'nextError, 'next>A function that returns a new flow from the failure cause.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'nextError, 'next>
kind:member

onExit

onExit handler flow
Member
Runs a handler with the flow's final outcome, whether it succeeded, failed, or was interrupted.

Parameters

NameTypeDescription
handlerExit<'value, 'error> -> Flow<'env, Never, unit>Receives the flow's Exit; it cannot fail with a typed error.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

transfer
|> Flow.onExit (fun exit ->
    match exit with
    | Exit.Success _ -> audit "transfer committed"
    | Exit.Failure _ -> audit "transfer rolled back")
kind:member

ensuring

ensuring finalizer flow
Member
Runs a finalizer after the flow, however it ends.

Parameters

NameTypeDescription
finalizerFlow<'env, Never, unit>The cleanup to run; it cannot fail with a typed error.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

render frame |> Flow.ensuring (Flow.delay (fun () -> canvas.Unlock(); Flow.ok ()))
kind:member

onInterrupt

onInterrupt handler flow
Member
Runs a handler only if the flow is interrupted.

Parameters

NameTypeDescription
handlerFlow<'env, Never, unit>The cleanup to run on interruption; it cannot fail with a typed error.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

upload |> Flow.onInterrupt (deletePartialFile path)
kind:member

never

never
Member
A flow that never completes on its own; it ends only when it is interrupted.

Returns

Flow<'env, 'error, 'value>

Verification Examples

// Runs the worker until the service is interrupted, then lets it drain its queue.
let serve (jobs: Queue<string>) (worker: Flow<unit, Never, unit>) : Flow<unit, Never, unit> =
    flow {
        let! _ = worker |> Flow.forkGraceful (Dequeue.shutdown jobs) (TimeSpan.FromSeconds 5.0)
        return! Flow.never
    }
kind:member

catch

catch handler flow
Member
Catches exceptions raised during execution and simple defect outcomes, then maps them to a typed error.

Parameters

NameTypeDescription
handlerexn -> 'errorA function of type exn -> 'error to map the exception.
flowFlow<'env, 'error, 'value>The source flow of type Axial`3 to monitor.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.die (System.Exception("boom")) |> Flow.catch (fun ex -> "caught: " + ex.Message)
kind:member

orElseWith

orElseWith fallback flow
Member
Computes a fallback flow from the typed error when the source flow fails.

Parameters

NameTypeDescription
fallback'error -> Flow<'env, 'error, 'value>A function that produces a new flow from the error value.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.fail "error" |> Flow.orElseWith (fun err -> Flow.succeed "recovered")
kind:member

orElse

orElse fallback flow
Member
Falls back to another flow when the source flow fails.

Parameters

NameTypeDescription
fallbackFlow<'env, 'error, 'value>The flow to run if the source flow fails.
flowFlow<'env, 'error, 'value>The source flow.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.fail "error" |> Flow.orElse (Flow.succeed "recovered")
kind:member

zip

zip left right
Member
Runs two flows sequentially and combines their successful values into a tuple.

Parameters

NameTypeDescription
leftFlow<'env, 'error, 'left>The first flow to run.
rightFlow<'env, 'error, 'right>The second flow to run.

Returns

Flow<'env, 'error, ('left * 'right)>

Verification Examples

Flow.zip (Flow.succeed 1) (Flow.succeed 2) |> Flow.run ()
kind:member

map2

map2 mapper left right
Member
Combines two flows with a mapping function.

Parameters

NameTypeDescription
mapper'left -> 'right -> 'valueA function that combines the successful values of both flows.
leftFlow<'env, 'error, 'left>The first flow to run.
rightFlow<'env, 'error, 'right>The second flow to run.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.map2 (fun x y -> x + y) (Flow.succeed 1) (Flow.succeed 2)
kind:member

apply

apply flow value
Member
Applies a flow-wrapped function to a flow-wrapped value.

Parameters

NameTypeDescription
flowFlow<'env, 'error, ('value -> 'next)>A flow that contains a function to apply.
valueFlow<'env, 'error, 'value>A flow that contains the value to apply the function to.

Returns

Flow<'env, 'error, 'next>

Verification Examples

let flow = Flow.apply (Flow.succeed (fun x -> x + 1)) (Flow.succeed 1)
kind:member

map3

map3 mapper left middle right
Member
Combines three flows with a mapping function.

Parameters

NameTypeDescription
mapper'left -> 'middle -> 'right -> 'valueA function that combines the successful values of all three flows.
leftFlow<'env, 'error, 'left>The first flow to run.
middleFlow<'env, 'error, 'middle>The second flow to run.
rightFlow<'env, 'error, 'right>The third flow to run.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.map3 (fun x y z -> x + y + z) (Flow.succeed 1) (Flow.succeed 2) (Flow.succeed 3)
kind:member

(<!>)

mapper <!> flow
Member
Maps the successful value of a synchronous flow.

Parameters

NameTypeDescription
mapper'value -> 'next
flowFlow<'env, 'error, 'value>

Returns

Flow<'env, 'error, 'next>
kind:member

(<*>)

flow <*> value
Member
Applies a flow-wrapped function to a flow-wrapped value.

Parameters

NameTypeDescription
flowFlow<'env, 'error, ('value -> 'next)>
valueFlow<'env, 'error, 'value>

Returns

Flow<'env, 'error, 'next>
kind:member

localEnv

localEnv mapping flow
Member
Runs a flow against an environment derived from the outer environment.

Parameters

NameTypeDescription
mapping'outerEnvironment -> 'innerEnvironmentA function that maps the outer environment to the inner environment.
flowFlow<'innerEnvironment, 'error, 'value>The flow to run with the inner environment.

Returns

Flow<'outerEnvironment, 'error, 'value>

Verification Examples

let flow = Flow.succeed 1 |> Flow.localEnv (fun outer -> outer)
kind:member

delay

delay factory
Member
Defers flow construction until execution time.

Parameters

NameTypeDescription
factoryunit -> Flow<'env, 'error, 'value>A function that returns the flow to execute.

Returns

Flow<'env, 'error, 'value>

Verification Examples

let flow = Flow.delay (fun () -> Flow.succeed 42)
kind:member

traverse

traverse mapping values
Member
Transforms a sequence of values into a flow and stops at the first failure.

Parameters

NameTypeDescription
mapping'value -> Flow<'env, 'error, 'next>A function that maps each value to a flow.
values'value seqThe sequence of values to transform.

Returns

Flow<'env, 'error, 'next list>

Verification Examples

let flows = [1; 2; 3] |> Flow.traverse (fun x -> Flow.succeed (x * 2))
kind:member

traversePar

traversePar parallelism mapping values
Member
Maps values to flows and runs them with bounded concurrency, returning results in input order.

Parameters

NameTypeDescription
parallelismParallelismThe maximum number of mappings running at once.
mapping'value -> Flow<'env, 'error, 'next>Maps each value to a flow.
values'value seqThe values to map.

Returns

Flow<'env, 'error, 'next list>

Verification Examples

let! pages = urls |> Flow.traversePar (Parallelism.bounded 8) fetchPage
kind:member

traverseParUsing

traverseParUsing parallelism resource mapping values
Member
Like traversePar, giving each worker its own resource, acquired once and reused for every value it maps.

Parameters

NameTypeDescription
parallelismParallelismThe maximum number of workers, and so of resources.
resourceResource<'env, 'error, 'resource>The resource each worker acquires.
mapping'resource -> 'value -> Flow<'env, 'error, 'next>Maps a value to a flow, given the worker's resource.
values'value seqThe values to map.

Returns

Flow<'env, 'error, 'next list>

Verification Examples

let! matches = commits |> Flow.traverseParUsing (Parallelism.ofProcessors id) openReader (fun reader commit -> search reader commit)
kind:member

forEachPar

forEachPar parallelism action values
Member
Runs a flow for each value with bounded concurrency, discarding the results.

Parameters

NameTypeDescription
parallelismParallelismThe maximum number of flows running at once.
action'value -> Flow<'env, 'error, unit>The flow to run for each value.
values'value seqThe values to process.

Returns

Flow<'env, 'error, unit>

Verification Examples

do! files |> Flow.forEachPar (Parallelism.ofProcessors id) indexFile
kind:member

forEachParUsing

forEachParUsing parallelism resource action values
Member
Like forEachPar, giving each worker its own resource, acquired once and reused for every value it processes.

Parameters

NameTypeDescription
parallelismParallelismThe maximum number of workers, and so of resources.
resourceResource<'env, 'error, 'resource>The resource each worker acquires.
action'resource -> 'value -> Flow<'env, 'error, unit>The flow to run for each value, given the worker's resource.
values'value seqThe values to process.

Returns

Flow<'env, 'error, unit>
kind:member

sequence

sequence flows
Member
Transforms a sequence of flows into a flow of a sequence and stops at the first failure.

Parameters

NameTypeDescription
flowsFlow<'env, 'error, 'value> seqThe sequence of flows to run.

Returns

Flow<'env, 'error, 'value list>

Verification Examples

Flow.sequence [Flow.succeed 1; Flow.succeed 2] |> Flow.run ()
kind:member

toAsync

toAsync environment flow
Member
Builds a cold async that runs the workflow when it is started.

Parameters

NameTypeDescription
environment'envThe environment used by the workflow.
flowFlow<'env, 'error, 'value>The workflow to describe.

Returns

Async<Exit<'value, 'error>>

Verification Examples

let handle = workflow |> Flow.toAsync environment
kind:member

startTask

startTask environment flow
Member
Starts the workflow immediately and returns a task handle for its final exit.

Parameters

NameTypeDescription
environment'envThe environment used by the workflow.
flowFlow<'env, 'error, 'value>The workflow to start.

Returns

Task<Exit<'value, 'error>>

Verification Examples

let running = workflow |> Flow.startTask environment
kind:member

run

run environment flow
Member
Runs the workflow and blocks until the final exit is available.

Parameters

NameTypeDescription
environment'envThe environment used by the workflow.
flowFlow<'env, 'error, 'value>The workflow to run.

Returns

Exit<'value, 'error>

Verification Examples

let exit = workflow |> Flow.run environment