ResultModule

PackageReified.Result
Fail-fast helpers over the standard F# Result type.

Summary

NameSignatureSynopsis
okok valueCreates an Ok result.
errorerror failureCreates an Error result.
mapmap mapper resultMaps the success value of a result.
mapErrormapError mapper resultMaps the error value of a result.
bindbind binder resultBinds a result to the next fail-fast operation.
orElseWithorElseWith fallback resultComputes a fallback result from the source error when the result fails.
orElseorElse fallback resultFalls back to another result when the source result fails.
okIfokIf predicate inputKeeps the input value when the predicate holds, or returns the supplied error.
failIffailIf predicate inputKeeps the input value when the predicate does not hold, or returns the supplied error.
requirerequire conditionRequires an already-computed condition where there is no subject value to preserve.
orErrororError failure resultReplaces whatever error a result carries with the supplied typed error.
fromTryfromTry (tryResult, tryResult)Converts a .NET Try* tuple into a unit-error result.
fromChoicefromChoice choiceConverts an F# Choice into a result.
fromOptionfromOption valueConverts an option into a unit-error result.
fromValueOptionfromValueOption valueConverts a value option into a unit-error result.
toOptiontoOption resultDrops the error channel and returns Some for success.
toValueOptiontoValueOption resultDrops the error channel and returns ValueSome for success.
defaultValuedefaultValue fallback resultReturns the success value or the supplied fallback value.
taptap effect resultRuns a side effect on the successful value and returns the result unchanged.
tapErrortapError effect resultRuns a side effect on the error value and returns the result unchanged.
traversetraverse mapping valuesMaps each value with a result-returning function, stopping at the first error.
sequencesequence valuesTurns a sequence of results into one fail-fast result containing all successes.
traverseAlltraverseAll mapping valuesMaps each value with a result-returning function, running every mapping and collecting every error.
sequenceAllsequenceAll valuesTurns a sequence of results into one result containing all successes, or every error.

ok

ok value
Member
Creates an Ok result.

Parameters

NameTypeDescription
value'a

Returns

Result<'a, 'b>

error

error failure
Member
Creates an Error result.

Parameters

NameTypeDescription
failure'a

Returns

Result<'b, 'a>

map

map mapper result
Member
Maps the success value of a result.

Parameters

NameTypeDescription
mapper'a -> 'b
resultResult<'a, 'c>

Returns

Result<'b, 'c>

mapError

mapError mapper result
Member
Maps the error value of a result.

Parameters

NameTypeDescription
mapper'a -> 'b
resultResult<'c, 'a>

Returns

Result<'c, 'b>

bind

bind binder result
Member
Binds a result to the next fail-fast operation.

Parameters

NameTypeDescription
binder'a -> Result<'b, 'c>
resultResult<'a, 'c>

Returns

Result<'b, 'c>

orElseWith

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

Parameters

NameTypeDescription
fallback'error -> Result<'value, 'error>
resultResult<'value, 'error>

Returns

Result<'value, 'error>

Verification Examples

let result = Error "boom"
result |> Result.orElseWith (fun error -> Ok (String.length error)) // Ok 4

orElse

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

Parameters

NameTypeDescription
fallbackResult<'value, 'error>
resultResult<'value, 'error>

Returns

Result<'value, 'error>

Verification Examples

let result = Error "boom"
result |> Result.orElse (Ok 5) // Ok 5

okIf

okIf predicate input
Member
Keeps the input value when the predicate holds, or returns the supplied error.

Parameters

NameTypeDescription
predicate'input -> bool
input'input

Returns

Result<'input, unit>

failIf

failIf predicate input
Member
Keeps the input value when the predicate does not hold, or returns the supplied error.

Parameters

NameTypeDescription
predicate'input -> bool
input'input

Returns

Result<'input, unit>

require

require condition
Member
Requires an already-computed condition where there is no subject value to preserve.

Parameters

NameTypeDescription
conditionbool

Returns

Result<unit, unit>

Verification Examples

request.AcceptedTerms |> Result.require |> Result.orError TermsNotAccepted

orError

orError failure result
Member
Replaces whatever error a result carries with the supplied typed error. Ok passes through unchanged.

Parameters

NameTypeDescription
failure'error
resultResult<'value, 'discardedError>

Returns

Result<'value, 'error>

fromTry

fromTry (tryResult, tryResult)
Member
Converts a .NET Try* tuple into a unit-error result.

Parameters

NameTypeDescription
tryResultbool
tryResult'value

Returns

Result<'value, unit>

fromChoice

fromChoice choice
Member
Converts an F# Choice into a result.

Parameters

NameTypeDescription
choiceChoice<'value, 'error>

Returns

Result<'value, 'error>

fromOption

fromOption value
Member
Converts an option into a unit-error result. The inverse of toOption.

Parameters

NameTypeDescription
value'value option

Returns

Result<'value, unit>

fromValueOption

fromValueOption value
Member
Converts a value option into a unit-error result. The inverse of toValueOption.

Parameters

NameTypeDescription
value'value voption

Returns

Result<'value, unit>

toOption

toOption result
Member
Drops the error channel and returns Some for success.

Parameters

NameTypeDescription
resultResult<'value, 'error>

Returns

'value option

toValueOption

toValueOption result
Member
Drops the error channel and returns ValueSome for success.

Parameters

NameTypeDescription
resultResult<'value, 'error>

Returns

'value voption

defaultValue

defaultValue fallback result
Member
Returns the success value or the supplied fallback value.

Parameters

NameTypeDescription
fallback'value
resultResult<'value, 'error>

Returns

'value

tap

tap effect result
Member
Runs a side effect on the successful value and returns the result unchanged.

Parameters

NameTypeDescription
effect'value -> unit
resultResult<'value, 'error>

Returns

Result<'value, 'error>

Verification Examples

Ok 10 |> Result.tap (printfn "loaded %d") // prints, then returns Ok 10

tapError

tapError effect result
Member
Runs a side effect on the error value and returns the result unchanged.

Parameters

NameTypeDescription
effect'error -> unit
resultResult<'value, 'error>

Returns

Result<'value, 'error>

Verification Examples

Error "boom" |> Result.tapError (printfn "failed: %s") // prints, then returns Error "boom"

traverse

traverse mapping values
Member
Maps each value with a result-returning function, stopping at the first error.

Parameters

NameTypeDescription
mapping'input -> Result<'output, 'error>
values'input seq

Returns

Result<'output list, 'error>

Verification Examples

[ "1"; "2" ] |> Result.traverse parseInt // Ok [ 1; 2 ]

sequence

sequence values
Member
Turns a sequence of results into one fail-fast result containing all successes.

Parameters

NameTypeDescription
valuesResult<'value, 'error> seq

Returns

Result<'value list, 'error>

Verification Examples

[ Ok 1; Error "missing"; Ok 3 ] |> Result.sequence // Error "missing"

traverseAll

traverseAll mapping values
Member
Maps each value with a result-returning function, running every mapping and collecting every error.

Parameters

NameTypeDescription
mapping'input -> Result<'output, 'error>
values'input seq

Returns

Result<'output list, 'error list>

Verification Examples

[ "1"; "x"; "y" ] |> Result.traverseAll parseInt // Error [ NotANumber "x"; NotANumber "y" ]

sequenceAll

sequenceAll values
Member
Turns a sequence of results into one result containing all successes, or every error.

Parameters

NameTypeDescription
valuesResult<'value, 'error> seq

Returns

Result<'value list, 'error list>

Verification Examples

[ Ok 1; Error "missing"; Error "invalid" ] |> Result.sequenceAll // Error [ "missing"; "invalid" ]