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 Results 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