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

Return Bool.true if the result indicates a success, else return Bool.false

Result.isOk (Ok 5)

isErr : Result ok err -> Bool

Return Bool.true if the result indicates a failure, else return Bool.false

Result.isErr (Err "uh oh")

withDefault : Result ok err, ok -> ok

If the result is Ok, return the value it holds. Otherwise, return 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, transform the value it holds by running a conversion function on it. Then return 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.negate
Result.map (Err "yipes!") Num.negate

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, transform the value it holds by running a conversion function on it. Then return 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

try : Result a err, (a -> Result b err) -> Result b err

If the result is Ok, transform the entire result by running a conversion function on the value the Ok holds. Then return 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, transform the entire result by running a conversion function on the value the Err holds. Then return that new result. If the result is Ok, this has no effect. Use try to transform an Ok.

Result.onErr (Ok 10) \errorNum -> Str.toNat errorNum
Result.onErr (Err "42") \errorNum -> Str.toNat errorNum