Result
Result ok err : [ Ok ok, Err err ]
The result of an operation that could fail: either the operation went okay, or else there was an error of some sort.
isOk : Result ok err -> Bool
Returns Bool.true
if the result indicates a success, else returns Bool.false
Result.isOk (Ok 5)
isErr : Result ok err -> Bool
Returns Bool.true
if the result indicates a failure, else returns Bool.false
Result.isErr (Err "uh oh")
withDefault : Result ok err, ok -> ok
If the result is Ok
, returns the value it holds. Otherwise, returns
the given default value.
Result.withDefault (Ok 7) 42 Result.withDefault (Err "uh oh") 42
map : Result a err, (a -> b) -> Result b err
If the result is Ok
, transforms the value it holds by running a conversion
function on it. Then returns a new Ok
holding the transformed value. If the
result is Err
, this has no effect. Use mapErr
to transform an Err
.
Result.map (Ok 12) Num.neg Result.map (Err "yipes!") Num.neg
Functions like map
are common in Roc; see for example List.map
,
Set.map
, and Dict.map
.
mapErr : Result ok a, (a -> b) -> Result ok b
If the result is Err
, transforms the value it holds by running a conversion
function on it. Then returns a new Err
holding the transformed value. If
the result is Ok
, this has no effect. Use map
to transform an Ok
.
Result.mapErr (Err "yipes!") Str.isEmpty Result.mapErr (Ok 12) Str.isEmpty
mapBoth : Result ok1 err1, (ok1 -> ok2), (err1 -> err2) -> Result ok2 err2
Maps both the Ok
and Err
values of a Result
to new values.
map2 : Result a err, Result b err, (a, b -> c) -> Result c err
Maps the Ok
values of two Result
s to a new value using a given transformation,
or returns the first Err
value encountered.
try : Result a err, (a -> Result b err) -> Result b err
If the result is Ok
, transforms the entire result by running a conversion
function on the value the Ok
holds. Then returns that new result. If the
result is Err
, this has no effect. Use onErr
to transform an Err
.
Result.try (Ok -1) \num -> if num < 0 then Err "negative!" else Ok -num Result.try (Err "yipes!") \num -> if num < 0 then Err "negative!" else Ok -num
onErr : Result a err, (err -> Result a otherErr) -> Result a otherErr
If the result is Err
, transforms the entire result by running a conversion
function on the value the Err
holds. Then returns that new result. If the
result is Ok
, this has no effect. Use try
to transform an Ok
.
Result.onErr (Ok 10) \errorNum -> Str.toU64 errorNum Result.onErr (Err "42") \errorNum -> Str.toU64 errorNum
onErr! : Result a err, (err => Result a otherErr) => Result a otherErr
Like onErr
, but it allows the transformation function to produce effects.
Result.onErr (Err "missing user") \msg -> try Stdout.line! "ERROR: $(msg)" Err msg